2012-03-21 36 views
3

我试图从Java客户端使用Web服务。类尝试创建Web服务客户端时未发现异常

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(); 

步入代码远远不够,

我使用的wsimport生成的类它会到达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:提供com.sun.xml.ws.spi.ProviderImpl

我觉得我失去了一些东西,不幸的是我不知道是什么......我需要在任何地方初始化提供程序吗?

+0

? – jtahlborn 2012-03-21 15:41:21

+0

我使用Java 6,我包括在我的pom.xml的JAXWS-RT扶养。不幸的是,我不知道如何判断我的类路径中还有什么。 – declyne 2012-03-21 15:49:08

+0

你不需要jaxws-rt,它包含在jre中。 – jtahlborn 2012-03-21 15:54:11

回答

1

您应该将Provider课程添加到您的classpath中。 如果您使用IDE,您可以轻松添加库,方法是右键单击库并选择“添加Jar文件”(或类似的东西!)。但是,如果你试图编译并通过terminal使用运行应用程序下面的命令:

javac -d [bin folder] -cp [jar files] [java source files] 
java -classpath [jar files] [Main class] 

你应该在MS Windows中使用Linux和Mac OS :;分裂的jar文件。正如你所说这是一个网络服务,我认为你正在使用IDE,第一个解决方案可能会帮助你。

P.S.如果您还将此jar文件添加到类路径中,并且此exception再次出现,请将此jar文件添加到您的Web服务器/容器库目录中。 (例如lib文件夹中tomcat。您使用的是和什么什么versio的Java,如果有的话,额外的罐子在classpath

+0

谢谢你,我不再为这个项目工作,但如果我回到它并且这有助于我回来并将其标记为答案。现在我会赶上你。 – declyne 2013-04-05 14:53:35