我正在尝试从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/

10-13 04:31