我有一个自定义 SOAP 处理程序,用于对 SOAP 消息进行架构验证。它适用于网络服务,我希望能够将它用于其他人。验证本身的代码非常通用——唯一真正的输入是用于验证的模式名称。我对如何/是否可以使用 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 创建多个基于 的 beanMyCustomSoapHandler
并为其赋予不同的值schemaLocation
,但是如何将这些 bean 连接到我的应用程序中的正确 Web 服务?它会通过handler-chain.xml
吗?还是我必须以编程方式进行?