0

使用此配置(在 Tomcat 中运行良好)初始化我的 webserviceTemplate:

<bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory">
    <property name="messageFactory">
        <bean class="com.sun.xml.internal.messaging.saaj.soap.ver1_2.SOAPMessageFactory1_2Impl"/>
    </property>
</bean>   
<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
   <constructor-arg ref="messageFactory"/>
</bean>

我得到这个堆栈跟踪:

Caused by: org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'com.sun.xml.internal.messaging.saaj.soap.ver1_2.SOAPMessageFactory1_2Impl' to required type 'javax.xml.soap.MessageFactory' for property 'messageFactory'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [com.sun.xml.internal.messaging.saaj.soap.ver1_2.SOAPMessageFactory1_2Impl] to required type [javax.xml.soap.MessageFactory] for property 'messageFactory': no matching editors or conversion strategy found

我无法弄清楚解决方案,有什么想法吗?

4

1 回答 1

0

我遇到了同样的问题,最后注意到异常消息表明无法在 SaajSoapMessageFactory 上设置属性“messageFactory”。这是令人困惑的,因为“messageFactory”也是被创建为 SaajSoapMessageFactory 的 bean 的名称。Spring 未能将 SaajSoapMessageFactory 的 messageFactory 属性设置为相同的 SaajSoapMessageFactory bean。

我找到了两个解决方案:

  • 我的元素包括 default-autowire="byName"。通过删除它,问题就消失了。
  • 在不删除 default-autowire 属性的情况下,我将 messageFactory 属性显式设置为 null。这有点尴尬,但似乎也有效:
    <bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory">
         <属性名称="soapVersion">
             <util:constant static-field="org.springframework.ws.soap.SoapVersion.SOAP_12"/>
         </属性>
         <property name="messageFactory">
             <null />
         </属性>
     </豆>
 
于 2014-06-07T00:58:59.410 回答