Java 如何截获SOAP消息并在处理之前对其进行转换?

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

我有一个任务需要转换自定义SOAP消息。首先,我必须获得这个定制的SOAP消息,然后我需要使用XSLT转换这个消息,然后在我的Web服务中处理这个消息。相反的过程是重复的

我有XSLT文件和转换SOAP消息的方法,但我不知道在哪里需要调用此方法进行转换。如何截取SOAP消息以及在何处截取?因为我只有一个带有一个方法的类(下面的示例),我不知道如何在webservice中处理之前转换此消息

@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 {