Ich habe einen SOAP-Webservice mit Java7 und JAX-WS entwickelt. Dies ist ein Auszug aus der Schnittstelle:Zugriff auf Webmethodenparameter in JAX-WS SOAP-Handler?
@WebService(name = "MyWebService",
targetNamespace = "http://www.something.com")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public interface MyWebServiceInterface
{
@WebMethod(operationName = "handleMsg",
action = "handleMsg")
@Oneway
void handleMsg(@WebParam(name = "MessageHeader",
targetNamespace = "http://www.something.com",
header = true,
partName = "header")
MessageHeader header,
@WebParam(name = "MessageBody",
targetNamespace = "http://www.soemthing.com",
partName = "body")
MessageType body);
}
ich eine benutzerdefinierte SOAP-Handler für diesen Web-Service implementiert haben (es Arbeit ist in Ordnung) einige zusätzliche Dinge zu tun. In der Methode handleFault(..)
muss ich auf das Original MessageHeader
der Web-Methode zugreifen (siehe Schnittstelle oben). Wie kann das gemacht werden?
public class MyHandler implements SOAPHandler<SOAPMessageContext>
{
// ...
@Override
public boolean handleFault(final SOAPMessageContext context)
{
final Boolean outbound =
(Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
// handle only incoming message which do have a message set
if (outbound != null && !outbound.booleanValue() && context.getMessage() != null)
{
MessageHeader header =
getOriginalHeaderOfFautlyMessage(); // <-- how can this be done?
}
}
}
Ok, ich verstehe. Ich kann dann 'soapHeader.getElementsByTagName (..)' verwenden, um einzelne Elemente abzurufen und den 'MessageHeader' manuell zu konstruieren. Gibt es eine Möglichkeit, das vollständig generierte Objekt zu beschleunigen und abzurufen? Irgendwie macht es das schon anders ... –
@MarkusL Benutzt du CXF? Wenn ja, denke ich, dass, wenn Ihr Handler nach der UNMARSHALL-Phase aufgerufen wird, Ihre Web-Methode params in List parameters = soapMessage.getContent (List.class); siehe http://grepcode.com/file/repo1.maven.org/maven2/org.apache.cxf/cxf-api/2.7.17/org/apache/cxf/interceptor/DocLiteralInInterceptor.java#DocLiteralInInterceptor und http://cxf.apache.org/docs/interceptors.html – MGorgon
Nein, ich verwende reines Java mit JAX-WS! –