我有一個自定義SOAP處理程序,用於SOAP消息的模式驗證。它適用於Web服務,我希望能夠用於其他人。驗證本身的代碼非常通用 - 唯一真正的輸入是用於驗證的模式的名稱。我精神上停留在如何/如果我可以使用Spring爲不同的服務配置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創建基於MyCustomSoapHandler
和g的多個bean請爲schemaLocation
指定不同的值,但是如何將這些bean連接到我的應用程序中正確的Web服務?是否會通過handler-chain.xml
?或者我必須以編程的方式來完成它?