SOAP Сбой веб-службы в Quarkus с неизвестной реализацией JAXBContext - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть служба Quarkus, в которой я запускаю sh a SOAP службу при запуске, как это:

@WebService(serviceName = "/service", portName = "ServicePort")
@SOAPBinding(style = SOAPBinding.Style.RPC)
@ApplicationScoped
public class Astute implements AstuteManager {

  void onStart(@Observes StartupEvent ev) {
    String url = "http://localhost:9005/";
    Endpoint.publish(url, this);        
}

@WebMethod(operationName = "Retrieve", action = "Retrieve")
@WebResult(name = "response", targetNamespace = "http://some.namepsace")
@RequestWrapper(localName = "RetrieveInfo", targetNamespace = "http://some.namepsace", 
     className = "dto.RetrieveDto")
@ResponseWrapper(localName = "RetrieveReply", targetNamespace = "http://some.namespace", 
    className = "dto.RetrieveReplyDto")
public RetrieveReplyDto retrieveClientPortfolio(
    @WebParam(name = "request", targetNamespace = "http://some.namespace") RetrieveInfo request) {
    //do something
}

Когда я достигаю этой конечной точки, я получаю:

SEVERE [com.sun.xml.int.ws.tra.htt.HttpAdapter] (pool-4-thread-1) Unknown JAXBContext implementation: 
   class com.sun.xml.bind.v2.runtime.JAXBContextImpl: com.sun.xml.internal.ws.spi.db.DatabindingException: 
   Unknown JAXBContext implementation: class com.sun.xml.bind.v2.runtime.JAXBContextImpl
        at com.sun.xml.internal.ws.spi.db.BindingContextFactory.getJAXBFactory(BindingContextFactory.java:192)
        at com.sun.xml.internal.ws.spi.db.BindingContextFactory.create(BindingContextFactory.java:134)
        at com.sun.xml.internal.ws.message.jaxb.JAXBMessage.create(JAXBMessage.java:152)
        at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createSOAP11Fault(SOAPFaultBuilder.java:424)
        at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createSOAPFaultMessage(SOAPFaultBuilder.java:201)
        at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createSOAPFaultMessage(SOAPFaultBuilder.java:189)
        at com.sun.xml.internal.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:411)
        at com.sun.xml.internal.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:706)
        at com.sun.xml.internal.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:260)
        at com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handleExchange(WSHttpHandler.java:98)
        at com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handle(WSHttpHandler.java:82)
        at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79)
        at sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:83)
        at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:82)
        at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:675)
        at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79)
        at sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:647)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

Я думаю, что это, возможно, пункт зависимости sh, но ничто в моем дереве зависимостей не выделяется. Это правильный способ запустить службу SOAP из Quarkus?

Вот зависимости в pom:

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-core</artifactId>
</dependency>
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-jaxb</artifactId>
</dependency>
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-resteasy</artifactId>
</dependency>
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-resteasy-jsonb</artifactId>
</dependency>
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-jdbc-mssql</artifactId>
</dependency>
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-hibernate-orm</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
     <version>3.7</version>
</dependency>

Quarkus V1.2.0

1 Ответ

1 голос
/ 17 февраля 2020

Я думаю, это могут быть проблемы с загрузкой классов, аналогичные тем, которые мы видели в прошлом с JAXB, когда некоторые классы исходят из самого JDK, а некоторые из зависимостей.

Не могли бы вы попробовать: - обновление до 1.3.0.Alpha1 (используйте quarkus-bom, а не quarkus-universe-bom), а также обновить версию плагина Quarkus Maven - затем добавьте следующие зависимости в ваш pom.xml:

<dependency>
  <groupId>javax.xml.ws</groupId>
  <artifactId>jaxws-api</artifactId>
  <version>2.3.1</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.ws</groupId>
  <artifactId>rt</artifactId>
  <version>2.3.1</version>
</dependency>

и посмотрите, решает вашу проблему.

Если это не так, создайте простой репродуктор и создайте проблему на нашем GitHub, чтобы мы могли рассмотреть ее поближе.

...