Extrahieren der gesamten SOAP-Nachricht mit JAX-WS
Ich habe eine EJB stateless bean web service und hätte gerne Zugriff auf die gesamte SOAP-Nachricht, nicht nur der SOAP-Body, wie ich bin derzeit immer in die parameter. Ich möchte zum senden der Nachricht an eine andere Komponente. Ich bin mit Spring-Konfiguration, aber nicht mit Spring-WS. Ich folgte diesem tutorial:
http://java.dzone.com/articles/creating-soap-message-handlers
als ist und gar keine änderungen vorgenommen für heute. Es meldet nur den SOAP-Nachricht. handleMessage() nicht immer aufgerufen.
@Stateless
@WebService(portName = "XRequest_PortType", serviceName = "XRequestService", endpointInterface = "XRequestPortType")
@Addressing(enabled = true)
@HandlerChain(file = "LogMessage_handler.xml")
@Interceptors(SpringBeanAutowiringInterceptor.class)
public class XRequest_PortTypeWS implements
XRequestPortType {
...}
Den LogMessage_handler.xml ist etwas anders als das tutorial, aber ich habe versucht, es in beide Richtungen:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<javaee:handler-chains
xmlns:javaee="http://java.sun.com/xml/ns/javaee"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<javaee:handler-chain>
<javaee:handler>
<javaee:handler-class>com.test.ws.LogMessageHandle</javaee:handler-class>
</javaee:handler>
</javaee:handler-chain>
</javaee:handler-chains>
LogMessageHandler:
package com.test.ws;
import java.io.IOException;
import java.util.Collections;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
/**
*
* @author meerasubbarao
*/
public class LogMessageHandler implements SOAPHandler<SOAPMessageContext> {
public boolean handleMessage(SOAPMessageContext messageContext) {
log(messageContext);
return true;
}
public Set<QName> getHeaders() {
return Collections.EMPTY_SET;
}
public boolean handleFault(SOAPMessageContext messageContext) {
return true;
}
public void close(MessageContext context) {
}
private void log(SOAPMessageContext messageContext) {
SOAPMessage msg = messageContext.getMessage(); //Line 1
try {
msg.writeTo(System.out); //Line 3
} catch (SOAPException ex) {
Logger.getLogger(LogMessageHandler.class.getName()).log(
Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(LogMessageHandler.class.getName()).log(
Level.SEVERE, null, ex);
}
}
}
Ist dies sogar der beste Weg, um die gesamte SOAP-Nachricht? Ich würde noch brauchen, um zu nennen, ein Spring-bean von XRequest_PortTypeWS zum senden der SOAP-Nachricht.
InformationsquelleAutor user994165 | 2012-10-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe die Artikel in http://java.dzone.com/articles/creating-soap-message-handlers
und ich bemerkte, dass Sie nicht eingerichtet handler-name in LogMessage_handler.xml
und eine weitere wichtige Sache ist, zu suchen LogMessage_handler.xml im gleichen Paket wo ist
web service bean. Auch fügen Sie bitte @Remote-annotation, um webservice-bean.
InformationsquelleAutor Denys
Ich habe eine SOAP-Handler und war in der Lage, um die vollständige SOAP-Nachricht. Die details sind in diesem anderen post.
Sendende Objekt aus SOAP-Handler Web Service
InformationsquelleAutor user994165