簡體   English   中英

嘗試創建Web服務客戶端時發現類未找到異常

[英]Class not found exception when trying to create web service client

我試圖從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您可以通過右鍵單擊庫輕松添加庫,然后選擇“添加Jar文件”(或類似的東西!)。 但是,如果您嘗試通過terminal編譯和運行應用程序,請使用以下命令:

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

你應該使用:在Linux和MAC OS中拆分jar文件; 在MS Windows中。 正如您所說這是一個Web服務,我認為您正在使用IDE ,第一個解決方案可能對您有所幫助。

PS如果您還將此jar文件添加到類路徑中並再次發生此exception ,請將此jar文件添加到Web服務器/容器庫目錄中。 (例如tomcat lib文件夾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM