我正在尝试从java客户机使用web服务。
我使用wsimport生成了类:
wsimport -keep -verbose http://localhost:5382/Service1.svc?wsdl
代码看起来像:
private String CreateSalesforceIssue() {
IssueService service = new IssueService();
IIssueService binding = service.getBasicHttpBindingIIssueService();
String issueID = binding.createIssue(type, description, steps,
expected, workaround, storage,
docType, actions, tools, external,
repeatability, workaroundType, severity,
pmSeverity, products, extensions, versions,
os, status, project, resolution, fixversions);
return issueID;
}
当它碰到这条线时:
IssueService service = new IssueService();
深入到代码中足够远,它就会到达javax.xml.ws.spi.provider并在那里失败。
打开(放)
public static Provider provider() {
try {
Object provider =
FactoryFinder.find(JAXWSPROVIDER_PROPERTY,
DEFAULT_JAXWSPROVIDER);
if (!(provider instanceof Provider)) {
Class pClass = Provider.class;
String classnameAsResource = pClass.getName().replace('.', '/') + ".class";
ClassLoader loader = pClass.getClassLoader();
if(loader == null) {
loader = ClassLoader.getSystemClassLoader();
}
URL targetTypeURL = loader.getResource(classnameAsResource);
throw new LinkageError("ClassCastException: attempting to cast" +
provider.getClass().getClassLoader().getResource(classnameAsResource) +
"to" + targetTypeURL.toString() );
}
return (Provider) provider;
} catch (WebServiceException ex) {
throw ex;
} catch (Exception ex) {
throw new WebServiceException("Unable to createEndpointReference Provider", ex);
}
}
在这条线上:
if (!(provider instanceof Provider)) {
使用ClassNotFoundException:provider com.sun.xml.ws.spi.providerImpl
我觉得我错过了一些东西,不幸的是我不知道…我需要在任何地方初始化提供程序吗?
最佳答案
您应该将Provider
类添加到您的classpath
中。
如果您使用IDE
可以通过右键单击library并选择“add jar file”(或类似的内容)轻松添加库。。但如果试图通过terminal
编译和运行应用程序,请使用以下命令:
javac -d [bin folder] -cp [jar files] [java source files]
java -classpath [jar files] [Main class]
您应该在linux和mac操作系统中使用
:
并在ms-windows中使用;
来分割jar文件。正如您所说,这是一个web服务,我认为您正在使用IDE
,第一个解决方案可能会帮助您。另外,如果您还将这个jar文件添加到类路径中,并且再次发生这种情况,请将这个jar文件添加到您的web服务器/容器库目录中。(例如
exception
中的lib
文件夹。关于java - 尝试创建Web服务客户端时找不到类异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9807521/