Java 使用Spring配置SOAP处理程序

Java 使用Spring配置SOAP处理程序,java,web-services,spring,soap,soaphandler,Java,Web Services,Spring,Soap,Soaphandler,我有一个自定义SOAP处理程序,用于SOAP消息的模式验证。它适用于web服务,我希望能够为其他人使用它。进行验证的代码本身是非常通用的——唯一真正的输入是用于验证的模式的名称。我一直在思考如何/是否可以使用Spring为不同的服务配置SOAP处理程序的不同实例 web服务声明为: @WebService(name = "MyService", ...) @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE) @Handler

我有一个自定义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>

com.ws.MyCustomSoapHandler
com.ws.MyCustomSoapHandler
在自定义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));
公共类MyCustomSoapHandler实现SOAPHandler
{
//为此假设getter/setter。
私有字符串schemaLocation=“schema/validation/service1.xsd”;
@凌驾
公共布尔handleMessage(SOAPMessageContext上下文)
{
...
//这是唯一需要改变模式的地方
schema=schemaFactory.newSchema(this.getClass().getClassLoader().getResource(schemaLocation));

我知道我可以使用Spring基于
MyCustomSoapHandler
创建多个bean,并为
schemaLocation
赋予它们不同的值,但是如何将这些bean连接到我的应用程序中正确的web服务?是通过
handler chain.xml
?还是我必须以编程的方式进行呢看起来这是不可能的(或者如果可能,我似乎无法让它工作),因为SOAP处理程序是由WebSphere容器创建的,而不是由Spring管理的。因此,我只是创建了一个包含大部分逻辑的抽象处理程序,并使用.properties文件来配置更特定于不同处理程序的详细信息