使用Spring配置SOAP处理程序

时间:2012-11-20 19:55:02

标签: java web-services spring soap soaphandler

我有一个自定义SOAP处理程序,我用它来进行SOAP消息的模式验证。它适用于Web服务,我希望能够将它用于其他人。执行验证的代码非常通用 - 它唯一真正的输入是用于验证的模式的名称。我在精神上坚持如何/如果我可以使用Spring为不同的服务配置不同的SOAP处理程序实例。

Web服务声明为:

@WebService(name = "MyService", ...)
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@HandlerChain(file="handler-chain.xml")
public interface MyService
{
   ....
}

handler-chain.xml文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
  <handler-chain>
    <handler>
      <handler-name>com.ws.MyCustomSoapHandler</handler-name>
      <handler-class>com.ws.MyCustomSoapHandler</handler-class>
    </handler>
  </handler-chain>
</handler-chains>

在自定义SOAP处理程序中,我有:

public class MyCustomSoapHandler implements SOAPHandler<SOAPMessageContext>
{
    //assume getter/setter for this.
    private String schemaLocation = "schema/validation/service1.xsd";
    @Override
    public boolean handleMessage(SOAPMessageContext context)
    {
        ...
        //This is the only place where the schema needs to vary
        schema = schemaFactory.newSchema(this.getClass().getClassLoader().getResource(schemaLocation));

我知道我可以使用Spring创建基于MyCustomSoapHandler的多个bean,并为schemaLocation提供不同的值,但是如何将这些bean连接到我的应用程序中的正确Web服务?它会通过handler-chain.xml吗?或者我必须以编程方式进行吗?

1 个答案:

答案 0 :(得分:0)

看起来这不可能(或者如果它是,我似乎无法使其工作),因为SOAP处理程序是由WebSphere容器创建的,并且它们不由Spring管理。所以我刚刚创建了一个包含大部分逻辑的抽象处理程序,并使用.properties文件来配置更具体的不同处理程序的详细信息。