javax.xml.ws.WebServiceException: невозможно создать JAXBContext - PullRequest
5 голосов
/ 12 сентября 2011

У меня есть 3 веб-сервиса, которые созданы с Netbean 6.9

, когда я работаю на своем компьютере на работе, он работает без ошибок.Однако, когда я копирую проект netbean на мой компьютер дома, он запускается с ошибкой, которая выглядит следующим образом.

 SEVERE: WSSERVLET11: failed to parse runtime descriptor: javax.xml.ws.WebServiceException: Unable to create JAXBContext
javax.xml.ws.WebServiceException: Unable to create JAXBContext
        at com.sun.xml.ws.model.AbstractSEIModelImpl.createJAXBContext(AbstractSEIModelImpl.java:166)
        at com.sun.xml.ws.model.AbstractSEIModelImpl.postProcess(AbstractSEIModelImpl.java:94)
        at com.sun.xml.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:258)
        at com.sun.xml.ws.server.EndpointFactory.createSEIModel(EndpointFactory.java:338)
        at com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:201)
        at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:505)
        at com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parseAdapters(DeploymentDescriptorParser.java:253)
        at com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parse(DeploymentDescriptorParser.java:147)
        at com.sun.xml.ws.transport.http.servlet.WSServletContextListener.contextInitialized(WSServletContextListener.java:124)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4467)
        at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1276)
        at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:378)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:199)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:558)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
        at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
        at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
        at java.lang.Thread.run(Thread.java:722)
Caused by: java.security.PrivilegedActionException: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
java.lang.StackTraceElement does not have a no-arg default constructor.
        this problem is related to the following location:
                at java.lang.StackTraceElement
                at public java.lang.StackTraceElement[] java.lang.Throwable.getStackTrace()
                at java.lang.Throwable
                at public java.lang.Throwable[] com.factbook.webservice.jaxws.ExceptionBean.suppressed
                at com.factbook.webservice.jaxws.ExceptionBean

        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.xml.ws.model.AbstractSEIModelImpl.createJAXBContext(AbstractSEIModelImpl.java:153)
        ... 30 more
Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
java.lang.StackTraceElement does not have a no-arg default constructor.
        this problem is related to the following location:
                at java.lang.StackTraceElement
                at public java.lang.StackTraceElement[] java.lang.Throwable.getStackTrace()
                at java.lang.Throwable
                at public java.lang.Throwable[] com.factbook.webservice.jaxws.ExceptionBean.suppressed
                at com.factbook.webservice.jaxws.ExceptionBean

        at com.sun.xml.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:102)
        at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:472)
        at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:302)
        at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1140)
        at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:154)
        at com.sun.xml.bind.api.JAXBRIContext.newInstance(JAXBRIContext.java:106)
        at com.sun.xml.ws.developer.JAXBContextFactory$1.createJAXBContext(JAXBContextFactory.java:109)
        at com.sun.xml.ws.model.AbstractSEIModelImpl$1.run(AbstractSEIModelImpl.java:161)
        at com.sun.xml.ws.model.AbstractSEIModelImpl$1.run(AbstractSEIModelImpl.java:154)
        ... 32 more

Ответы [ 8 ]

1 голос
/ 13 октября 2015

У меня была такая же проблема, но мне просто нужно было удалить исключения, потому что я выбрасывал неуниверсальные исключения, такие как JAXBException, а затем создал EndPoint, который возвращает пользовательское исключение примерно так:

@WebService
public class MyEndPoint {




    @WebMethod
    public String myOperation(String xmlString) throws MyException {
        ...
        return null;
    }



}

И мой класс Исключений, подобный следующему:

public class MyException extends Exception {

    private String message;

    public String getMessage() {
        return super.getMessage();
    }

    public MyException(String message) {
        super(message);
    }

}

В моем Реализующем интерфейсе сервисов я перехватываю все исключения Specifics и выкидываю MyException в конечную точку.

1 голос
/ 23 апреля 2014

По существу, существует конфликт в версии jar веб-сервисов, которую ожидает приложение и что было загружено загрузчиком классов. У нас была похожая проблема, когда приложение работало в Tomcat, но выдало ошибку в Weblogic

В итоге мы создали файл weblogic.xml в папке WEB-INF войны со следующим в контейнере-дескрипторе

**<prefer-application-packages>
    <package-name>javax.xml.ws.*</package-name>
    <package-name>com.sun.xml.ws</package-name>
</prefer-application-packages>**

Как вы можете видеть, мы просим weblogic соблюдать пакеты веб-сервисов, которые поставляются с приложением, и игнорировать веб-версию пакетов веб-сервисов

Надеюсь, это поможет.

1 голос
/ 07 марта 2014

Этот URL содержит более подробное объяснение основной причины этого исключения

https://issues.apache.org/jira/browse/CXF-4754

1 голос
/ 19 октября 2011

У меня была эта проблема на Java 7 (Java 1.7).Решил это, удалив webservices-api-2.0.1.jar из пути к классам.

0 голосов
/ 12 июля 2018

Если ваши классы используются другим проектом, измените ваши классы для реализации java.io.Serializable. Это решило мою проблему.

0 голосов
/ 10 мая 2018

У меня было такое же исключение. Мои классы обслуживания были сгенерированы CXF, и когда я вызывал метод обслуживания, он говорил " 28 count IllegalAnnotationExceptions ". Потому что у сервиса было 14 методов и 2 класса-оболочки для каждого (responseWrapper, requestWrapper). Проблема заключалась в том, что в моем проекте нет ссылки на библиотеку Cxf. Просто добавьте эти (я использовал версию 2.7.5):

org.apache.cxf -> 
cxf-api,
cxf-tools-common,
cxf-rt-bindings-soap
0 голосов
/ 18 мая 2016

Это общее исключение; "Невозможно создать JAXBContext"

Ошибка JAXB возникает при преобразовании объектов Java в XML или наоборот, если в отображении что-то не так.

method mesajUzunlu ğ u () производит клиент, содержащий методы и неверное отображение.Кроме этого tempuri.org targetNamespace полностью разрушает другие службы, использующие это пространство имен.@ ("mesajUzunl u \ u011f u") эта строка в представлении Unicode не совпадает с * , и мы не можем создать ошибку JAXBContext

[ServiceWSDL_URL_mesajUzunlu ğ u] [1]

Я получил эту ошибку, потому что в моем отображении есть символ не ASCII. 'ğ' .К сожалению, даже серьезные провайдеры предоставляют веб-сервисы, которые используют http://tempuri.org в качестве пространства имен.Правильно использовать URL-адрес конечной точки службы.Тем не мение.Это создает пакет org.tempuri для прокси-классов веб-клиента.Если существует более одного tempuri.org, использующего поставщиков веб-сервисов, и вы создаете свой класс, соответственно, ваш jar будет скомпилирован в org.tempuri для более чем одного сервиса.Тогда что происходит?Даже этот не-ascii-символ встречается только для определенной службы, все мои клиенты начали удивлять этой ошибкой.Я только что обнаружил реальную причину, очень тщательно изучив Колл Стэк.Я не понимаю, почему эти серьезные организации, такие как министерства или телекоммуникационные компании, используют tempuri.org.

Мой совет - искать символы не-ASCII, внимательно следите за StackTrace и учитывайте org.tempuri при кодировании клиентов.

Среда: Java 1.7, нет webservices-api-2.0.1.jar, последняя версия jaxb-imp.jar

JAXB обозначает архитектуру Java для XMLbinding.It используется для преобразования XML в объект java и объект java в XML. JAXB определяет API для чтения и записи объектов Java в и из документов XML. В отличие от SAX и DOM, нам не нужно знать о методах синтаксического анализа XML.

Для этого конкретного случая в этом вопросе вышеприведенное утверждение привело нас к пониманию следующего элемента stackTrace. Ошибка не может быть передана нам. Из-за сериализации Object <-> XML.

java.lang.StackTraceElement не имеет конструктора по умолчанию без аргументов.

Единственное, что нужно сделать, это просмотреть знакомые элементы stacktrace и использовать инструменты типа Soap UIисследовать.Если мы являемся владельцем службы, лучше вернуть элементы serialize-OK, такие как строка JSON или пользовательский сопоставленный элемент XML.

0 голосов
/ 17 сентября 2012

Для другого Java-проекта после обновления до Java 7 я также испытал

ошибка: [core] java.lang.StackTraceElement: TypeDefinition должен иметь конструктор без аргументов или аннотироваться фабричным методом.

, которая оказалась проблемой с enunciate. Решение состояло в том, чтобы заменить все версии версии 1.25 на 1.26 в соответствующих файлах pom.xml.

...