2012-11-20 82 views
0

我有一個自定義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?或者我必須以編程的方式來完成它?

回答

0

看起來這不是可能的(或者如果是這樣,我似乎無法得到它的工作),因爲SOAP處理程序是由WebSphere容器創建的,並且它們不受Spring管理。所以我創建了一個包含大部分邏輯的抽象處理程序,並使用一個.properties文件來配置針對不同處理程序更具體的細節。