2016-04-25 2 views
2

Я изучаю, как создавать логические обработчики в JAX-WS SOAP-сервисах. Здесь я пытаюсь получить данные полезной нагрузки и хочу напечатать это для тестирования. Но у меня возникают проблемы.Как получить объект полезной нагрузки от SOAP Logical Handler

Вот мой LogincalHandler код

public class HelloMessengerLogicalHandler implements LogicalHandler<LogicalMessageContext> { 

    public void close(MessageContext ctx) { 
    } 

    public boolean handleFault(LogicalMessageContext ctx) { 
     return false; 
    } 

    public boolean handleMessage(LogicalMessageContext ctx) { 
     Boolean outbound = (Boolean) ctx.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); 
     if(outbound) { 
      LogicalMessage message = ctx.getMessage(); 
      //Source payload = message.getPayload(); 
      JAXBContext jaxbContext; 
      try { 
       jaxbContext = JAXBContext.newInstance(Person.class); 
       Object jaxbPayload = message.getPayload(jaxbContext); 
       System.out.println(jaxbPayload); 
      } catch (JAXBException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

     } 

     return true; 
    } 
} 

Вот мой вебсервис код:

@WebService 
@HandlerChain(file = "handler-chain.xml") 
public class HelloMessenger { 
    public Person getPerson(String name) { 
     return new Person(name); 
    } 
} 

Это мой Person класс:

public class Person { 

    // Default Constructor & Getters, Setters 
    private String name; 

    public Person(String name) { 
     this.name = name; 
    } 
    @Override 
    public String toString() { 
     return "Person [name=" + name + "]"; 
    } 
} 

Когда я публикую свой код и получить доступ к webservice Я получаю ниже исключения:

javax.xml.ws.WebServiceException: javax.xml.bind.MarshalException 
- with linked exception: 
[com.sun.istack.internal.SAXParseException2; unexpected element (uri:"http://simple/", local:"getPersonResponse"). Expected elements are (none)] 
    at com.sun.xml.internal.ws.handler.LogicalMessageImpl.getPayload(LogicalMessageImpl.java:121) 
    at simple.HelloMessengerLogicalHandler.handleMessage(HelloMessengerLogicalHandler.java:31) 
    at simple.HelloMessengerLogicalHandler.handleMessage(HelloMessengerLogicalHandler.java:1) 
    at com.sun.xml.internal.ws.handler.HandlerProcessor.callHandleMessageReverse(HandlerProcessor.java:326) 
    at com.sun.xml.internal.ws.handler.HandlerProcessor.callHandlersResponse(HandlerProcessor.java:197) 
    at com.sun.xml.internal.ws.handler.ServerLogicalHandlerTube.callHandlersOnResponse(ServerLogicalHandlerTube.java:158) 
    at com.sun.xml.internal.ws.handler.HandlerTube.processResponse(HandlerTube.java:149) 
    at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:636) 
    at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:585) 
    at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:570) 
    at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:467) 
    at com.sun.xml.internal.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:299) 
    at com.sun.xml.internal.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:593) 
    at com.sun.xml.internal.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:244) 
    at com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handleExchange(WSHttpHandler.java:95) 
    at com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handle(WSHttpHandler.java:80) 
    at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:77) 
    at sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:83) 
    at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:80) 
    at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:677) 
    at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:77) 
    at sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:649) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 

Я новичок, я понимаю, что объект полезной нагрузки - это Person, поэтому он должен отображать объект person в журналах, но я вижу эту ошибку.

Пожалуйста, объясните, что эта ошибка указывает &, как получить данные полезной нагрузки в логическом обработчике?

ответ

1

Источник полезной нагрузки = message.getPayload();

затем преобразовать объект DomSource в строку с помощью xmltransformation или каким-либо другим способом, он даст вам полезную нагрузку.

Смежные вопросы