2013-11-27 80 views
0

我使用CXF自動生成soap webservice類。結果將包含在WSDL/XSD文件中找到的硬編碼URL。爲CXF自動生成的webservice動態提供WebMethod操作?

@WebService(...) 
@XmlSeeAlso(...) 
@SOAPBinding(...) 
public interface AutoGeneratedPortType { 

    @WebResult(...) 
    @WebMethod(action = "http://localhost:8080/TheService") //that's the problem 
    public MyRsp service(
     @WebParam(...) 
     MyReq parameters 
    ) throws FaultMessage; 
} 

因此,我首先要經過所有WSDL文件,並與生產URL更換localhosts(工作正常用記事本++過的所有文件,但仍有許多工作要做)。 問題:每次獲取WSDL的API提供更新的文件時,我都必須重複這些步驟。

我寧願以某種方式「覆蓋」將WebMethod動作參數調用服務方法時:

AutoGeneratedPortType port = new MyService().geAutoGeneratedPort(); 
port.service(req); 

但是,這可能嗎?我可以動態提供生成的@WebMethod網址嗎?

回答

0

如果有人知道一個更好的解決方案,在這裏是一種可能性:

Map<String, Object> rc = ((BindingProvider) port).getRequestContext(); 
rc.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, ENDPOINT); 
+0

如果您正在使用CXF maven的代碼生成插件'CXF-CODEGEN-plugin'您可以通過下面的配置'指定WSDL位置 classpath:wsdl/kp.wsdl'在這裏我爲wsdlLocations配置類路徑。這可能有點不相關,但你可以嘗試這樣的事情。但我還沒有看到按照你的方式配置動作。 –

+0

我使用maven配置wsdl位置。請注意,我要求指定enpoint,因爲我提供的所有wsdl都包含localhost作爲URL! – membersound

相關問題