我有需要转换自定义SOAP消息的任务。一开始我必须得到这个自定义SOAP消息,然后我需要使用XSLT转换此消息,然后在我的WebService中处理此消息。重复相反的过程。
我有转换SOAP消息的XSLT文件和方法,但我不知道在哪里需要调用此方法进行转换。如何拦截SOAP消息以及我必须在哪里执行此操作?因为我只有一个方法的课程(下面的例子),我不明白如何在webservice中处理之前转换这个消息。
@WebService
public class Calculator {
public String showCard(final CreditCard creditCard) {
return creditCard.toString();
}
}
以下是technical mapping我需要做的事情。
答案 0 :(得分:0)
如何拦截SOAP消息以及我必须在哪里执行此操作?
您需要SoapHandler在执行端点的业务逻辑之前捕获soap请求,并使用其他SoapHandler来转换出站响应。
定义SoapHandler类(从mkyong中提取的示例)
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() {
}
}
创建soap处理程序XML文件
<?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>
使用@HandlerChain
将SOAP处理程序附加到Web服务@WebService
@HandlerChain(file="handler-chain.xml")
public class Calculator {
如果您使用像CXF或spring-WS这样的jax-ws框架,请查看文档以查看具体配置