Класс не найден исключение при попытке создать клиент веб-службы - PullRequest
3 голосов
/ 21 марта 2012

Я пытаюсь использовать веб-сервис от клиента Java.

Я сгенерировал классы, используя 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: поставщик com.sun.xml.ws.spi.ProviderImpl

Я чувствую, что что-то упустил, к сожалению, я не уверен, что ... Нужно ли где-нибудь инициализировать провайдера?

1 Ответ

1 голос
/ 04 апреля 2013

Вы должны добавить Provider класс в ваш classpath.Если вы используете IDE, вы можете легко добавить библиотеку, щелкнув правой кнопкой мыши по библиотеке и выбрав «добавить файл Jar» (или что-то в этом роде!).Но если вы попытаетесь скомпилировать и запустить ваше приложение с помощью terminal, используйте следующие команды:

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

, вам следует разделить файлы JAR, используя : в Linux и MAC OS и ; в MS Windows,Поскольку вы сказали, что это веб-служба, я думаю, что вы используете IDE, и вам может помочь первое решение.

PS Если вы также добавили этот jar-файл в путь к классам, и это exception произойдет снова,добавьте этот файл jar в каталог веб-сервера / библиотеки контейнеров.(например, папка lib в tomcat.

...