Исключение происходит с обработчиком JAX-RPC - PullRequest
0 голосов
/ 13 февраля 2009

У меня есть несколько SOAP веб-сервисов, собранных с JAX-RPC. Они работают нормально. Но как только я добавляю обработчик, я получаю исключение. Когда привязка удаляется из webservices.xml, все снова работает нормально.

Странно то, что сам обработчик не включен в трассировку стека исключения. Я также заметил, что методы обработчика init и getHeaders вызываются до возникновения исключения.

Обработчик добавляется в webservices.xml со следующим xml:

<handler>
  <handler-name>My Message Handler</handler-name>
  <handler-class>kpn.MyMessageHandler</handler-class>
</handler>

Сам обработчик является просто заглушкой, сгенерированной IDE из интерфейса, поэтому я не буду включать всю реализацию:

public class MyMessageHandler implements javax.xml.rpc.handler.Handler {
  @Override
  public boolean handleRequest(MessageContext context) {
    System.out.println("handel-Request");
    return true;
  }
  ...
}

Это фактически генерирует три исключения в моем журнале (с точно такой же отметкой времени). Из-за длины я включаю только часть.

Log Level  WARNING 
Logger  javax.enterprise.system.container.web 
Message ID  preWebHandlerError java.lang.ClassCastException 
Complete Message  com.sun.xml.messaging.saaj.soap.impl.TextImpl cannot be cast to javax.xml.soap.SOAPElement at
    com.sun.xml.rpc.server.StreamingHandler.getOpcodeForRequestMessage(StreamingHandler.java:657) at
    com.sun.enterprise.webservice.WsUtil.getInvMethod(WsUtil.java:1277) at
    com.sun.enterprise.webservice.ServletPreHandler.handleRequest(ServletPreHandler.java:86) at
    com.sun.xml.rpc.client.HandlerChainImpl.handleRequest(HandlerChainImpl.java:103) at
    com.sun.xml.rpc.server.StreamingHandler.callRequestHandlers(StreamingHandler.java:962) at
    com.sun.xml.rpc.server.StreamingHandler.preHandlingHook(StreamingHandler.java:868) at
    kpn.kpc.SOAPKPCReadCustomerClassification_v01PortType_Tie.preHandlingHook(SOAPKPCReadCustomerClassification_v01PortType_Tie.java:242) at
    com.sun.xml.rpc.server.StreamingHandler.handle(StreamingHandler.java:127) at
    com.sun.xml.rpc.server.http.JAXRPCServletDelegate.doPost(JAXRPCServletDelegate.java:467) at
    com.sun.enterprise.webservice.JAXRPCServlet.doPost(JAXRPCServlet.java:119) at
    javax.servlet.http.HttpServlet.service(HttpServlet.java:738) at
    ...

Log Level  SEVERE 
Logger  com.sun.xml.rpc.server 
Message ID  com.sun.xml.messaging.saaj.soap.impl.TextImpl cannot be cast to javax.xml.soap.SOAPBodyElement java.lang.ClassCastException 
Complete Message  com.sun.xml.messaging.saaj.soap.impl.TextImpl cannot be cast to javax.xml.soap.SOAPBodyElement at
    com.sun.enterprise.webservice.WsUtil.throwSOAPFaultException(WsUtil.java:1312) at
    com.sun.enterprise.webservice.WsUtil.throwSOAPFaultException(WsUtil.java:1288) at
    com.sun.enterprise.webservice.ServletPreHandler.handleRequest(ServletPreHandler.java:99) at
    ...

Log Level  SEVERE 
Logger  com.sun.xml.rpc.server 
Message ID  JAXRPCTIE01 
Complete Message  caught exception while handling request: java.lang.ClassCastException: com.sun.xml.messaging.saaj.soap.impl.TextImpl cannot be cast to javax.xml.soap.SOAPBodyElement java.lang.ClassCastException: com.sun.xml.messaging.saaj.soap.impl.TextImpl cannot be cast to javax.xml.soap.SOAPBodyElement at
    com.sun.enterprise.webservice.WsUtil.throwSOAPFaultException(WsUtil.java:1312) at
    com.sun.enterprise.webservice.WsUtil.throwSOAPFaultException(WsUtil.java:1288) at
    com.sun.enterprise.webservice.ServletPreHandler.handleRequest(ServletPreHandler.java:99) at
    ...

У кого-нибудь есть идеи, чтобы решить эту проблему?

1 Ответ

2 голосов
/ 13 февраля 2009

Ваши библиотеки находятся в несовместимом состоянии.

Важная часть: java.lang.ClassCastException: com.sun.xml.messaging.saaj.soap.impl.TextImpl cannot be cast to javax.xml.soap.SOAPBodyElement

Это означает, что либо jre содержит реализацию для javax.xml (т.е. jre 6.0), либо glassfish содержит среду выполнения с более новой реализацией, либо вы включили библиотеку, которая не совместима.

Кто-то нарушил реализацию xml между 1.4 -> 1.5. Я предлагаю поиск во всех банках javax.xml.soap.SOAPBodyElement. Вы найдете дубликаты, которые не совместимы (например, xml-beans stax или что-то в этом роде).

...