Java 如何截获SOAP消息并在处理之前对其进行转换?
我有一个任务需要转换自定义SOAP消息。首先,我必须获得这个定制的SOAP消息,然后我需要使用XSLT转换这个消息,然后在我的Web服务中处理这个消息。相反的过程是重复的 我有XSLT文件和转换SOAP消息的方法,但我不知道在哪里需要调用此方法进行转换。如何截取SOAP消息以及在何处截取?因为我只有一个带有一个方法的类(下面的示例),我不知道如何在webservice中处理之前转换此消息Java 如何截获SOAP消息并在处理之前对其进行转换?,java,web-services,xslt,soap,transform,Java,Web Services,Xslt,Soap,Transform,我有一个任务需要转换自定义SOAP消息。首先,我必须获得这个定制的SOAP消息,然后我需要使用XSLT转换这个消息,然后在我的Web服务中处理这个消息。相反的过程是重复的 我有XSLT文件和转换SOAP消息的方法,但我不知道在哪里需要调用此方法进行转换。如何截取SOAP消息以及在何处截取?因为我只有一个带有一个方法的类(下面的示例),我不知道如何在webservice中处理之前转换此消息 @WebService public class Calculator { public String s
@WebService
public class Calculator {
public String showCard(final CreditCard creditCard) {
return creditCard.toString();
}
}
以下是我需要做的事情
如何截取SOAP消息以及在何处截取
在执行端点的业务逻辑之前,您需要一个SoapHandler来捕获soap请求,需要另一个SoapHandler来转换出站响应
定义SoapHandler类(从中提取的示例)
如果您使用像CXF或SpringWS这样的jax-ws框架,请查看文档以查看特定的配置
public class CalculatorSoapHandler implements SOAPHandler<SOAPMessageContext>{
@Override
public boolean handleMessage(SOAPMessageContext context) {
Boolean isRequest = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
//for response message only, true for outbound messages, false for inbound
if(!isRequest){
try{
SOAPMessage soapMsg = context.getMessage();
SOAPEnvelope soapEnv = soapMsg.getSOAPPart().getEnvelope();
SOAPHeader soapHeader = soapEnv.getHeader();
//process....
}catch(SOAPException e){
System.err.println(e);
}catch(IOException e){
System.err.println(e);
}
}
//continue other handler chain
return true;
}
@Override
public boolean handleFault(SOAPMessageContext context) {
}
@Override
public void close(MessageContext context) {
}
@Override
public Set<QName> getHeaders() {
}
}
<?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.CalculatorSoapHandler</javaee:handler-class>
</javaee:handler>
</javaee:handler-chain>
</javaee:handler-chains>
@WebService
@HandlerChain(file="handler-chain.xml")
public class Calculator {