Я изучаю, как создавать логические обработчики в 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 в журналах, но я вижу эту ошибку.
Пожалуйста, объясните, что эта ошибка указывает &, как получить данные полезной нагрузки в логическом обработчике?