Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java REQ:Spring配置的CXF ws客户端--替换像';地址';_Java_Web Services_Spring_Cxf_Configurable - Fatal编程技术网

Java REQ:Spring配置的CXF ws客户端--替换像';地址';

Java REQ:Spring配置的CXF ws客户端--替换像';地址';,java,web-services,spring,cxf,configurable,Java,Web Services,Spring,Cxf,Configurable,我必须联系Web服务(WS)。我使用的是JDK1.6、maven 3.04、Spring3.20和apache的CXF2.7.2。使用maven,我通过向WS提供wsdl文件来创建存根。我有一个WS-client的spring配置,它看起来像 @Autowired com.xxx.payment.Payment client; .. // Set all needed parameters. PaymentGetBalanceResponse response = null; PaymentG

我必须联系Web服务(WS)。我使用的是JDK1.6、maven 3.04、Spring3.20和apache的CXF2.7.2。使用maven,我通过向WS提供wsdl文件来创建存根。我有一个WS-client的spring配置,它看起来像

@Autowired 
com.xxx.payment.Payment client;
..
// Set all needed parameters.
PaymentGetBalanceResponse response = null;
PaymentGetBalance getBalance = new PaymentGetBalance();
RequestGetBalance value = new RequestGetBalance();
value.setTransactionId("transActionId");
getBalance.setRequest(value );

// Now call the WS and get the response
response = client.getBalance(getBalance); // generated by the cxf -client argument.
servlet-context.xml

<jaxws:client id="paymentClient" serviceClass="com.xxx.payment.Payment"
    address="http://127.0.0:8088/mockPaymentBinding" <!-- SOAPUI mock -->
    username="username"
    password="secret" />
<!- username and password are for wsdl basic authentication -->
“响应”行由CXF作为示例生成。然后Eclipse告诉我缺少了一些东西(getbalance),并可以选择在行上方为我创建它。然后其他东西(价值)丢失了等等。最后,正确填写了所有参数。所有缺少的内容/变量/对象都在生成的存根代码中

这就像一个符咒,但地址是在spring配置中硬编码的。应用程序的配置参数存储在一个简单的数据库中。使用Springbean可以访问内容,因此我可以使用类似config.getValue(URL)的东西在代码的最后获取变量

我希望能够更改上面代码中的“地址”(url WS),但还没有找到一种方法。在生成的存根代码中找不到setter。另一种方法是在springservlet-context.xml文件中使用变量,但这些变量必须来自数据库。第二种选择。我可能/希望从底部开始,使用ObjectFactory(在存根中)来创建对象。然后设置正确的参数(在“新”或setter中),然后以我的方式到达顶部。一个同事已经这样做了(不是为了“地址”),这似乎是可行的,但代码是次优的/混乱的。此外,我希望能够有用户名和密码配置,而不是静态的。在CXF站点上进行了大量RTM,但没有效果

阅读一些关于JaxWsProxyFactoryBean的内容,但由于我使用Springs@autowire功能,所以无法在这里理解如何应用它

我一直在为这个问题绞尽脑汁,但我的神经元似乎在转圈子。非常感谢您的帮助/指点

来自CXF用户指南:

如果我正确推断了spring配置,我认为这样做可以:

   @Autowired
   com.xxx.payment.Payment client;
   // ... 
   BindingProvider provider = (BindingProvider)client.getServicePort();
   // You can set the address per request here
   provider.getRequestContext().put(
        BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
        "http://my/new/url/to/the/service");