使用Spring的每个操作的自定义超时配置

时间:2015-09-01 17:09:19

标签: java spring soap wsdl cxf

我正在使用Soap WS,我必须自定义每个操作的超时配置。自定义实际上是使用cxf及其http-conf:conduit完成的,无法自定义到操作级别。

我的实际配置是:

<bean id="proxyFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
   <property name="serviceClass" value="com.package.PortType" />
   <property name="address" ref="URL_WS" />
</bean>

<bean id="URL_WS" class="java.lang.String">
     <constructor-arg value="http://serveraddress/Service"/>         
</bean>

<http-conf:conduit name="http://serveraddress/Service.*"> 
    <http-conf:client ConnectionTimeout="10000" ReceiveTimeout="10000"/> 
</http-conf:conduit>

使用此配置,此WS的所有超时都可达10000毫秒。

如上所述,我想将其自定义为操作级别,我找到this link并尝试按照该过程进行操作,但我遇到了实现问题,但我只是{{ 1}}在我的classpath中,它有工厂方法: com.ibm.wsdl.util.xml.QNameUtils,采用public static QName newQName(Node paramNode)

的方法

我尝试使用此实现更改代码:

org.w3c.dom.Node

<bean id="proxyFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"> <property name="delegate"> <jaxws:client serviceClass="com.package.PortType" address="URL_WS" > <jaxws:outInterceptors> <bean class="com.package.CustomTimeoutInterceptor"> <property name="receiveTimeoutByOperationName"> <map key-type="javax.xml.namespace.QName" value-type="java.lang.Long"> <entry value="10"> <key> <bean class="com.ibm.wsdl.util.xml.QNameUtils" factory-method="newQName"> <!-- I don't know what to put here --> </bean> </key> </entry> </map> </property> </bean> </jaxws:outInterceptors> </jaxws:client> </property> </bean> 的实施是Node。我不知道我必须使用哪个com.sun.org.apache.xerces.internal.dom.NodeImpl'子类以及如何创建它以使其以bean方式工作,我在使用这些不同的实现和这些不同的dom Levels的文档中丢失了自己。 我只想创建一个NodeImpl的Object子类,它可以在这个Node方法中工作 要么 找到一种不同的方式来自定义我的配置

1 个答案:

答案 0 :(得分:0)

我终于解决了这个问题,这是工作解决方案:

我保留了链接的CustomTimeoutInterceptor,并在this link的帮助下混合了解决方案。

我也保留了我的初始配置,我发现seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { int progress = 0; @Override public void onProgressChanged(SeekBar seekBar, int progresValue, boolean fromUser) { progress = progresValue; textView.setText(progress + "/" + seekBar.getMax()); } @Override public void onStartTrackingTouch(SeekBar seekBar) { // Do something here, if you want to do anything at the start of // touching the seekbar } @Override public void onStopTrackingTouch(SeekBar seekBar) { // Display the value in textview textView.setText(progress + "/" + seekBar.getMax()); } }); 有一个工厂方法。我刚刚将这部分添加到我的配置中:

javax.xml.namespace.QName