使用Spring定义SOAP连接器时,在我的WebApp中使用Saxon和Xalan的问题

时间:2012-09-20 16:57:51

标签: spring soap saxon xalan

我正在尝试将SOAP Web服务添加到现有应用程序中,并且由于Saxon / Xalan冲突而遇到大量麻烦。当我的Web应用程序启动时,我总是收到错误:

 java.lang.IllegalArgumentException: Unknown type of result: class javax.xml.transform.dom.DOMResult

堆栈追踪:

Caused by: java.lang.IllegalArgumentException: Unknown type of result: class javax.xml.transform.dom.DOMResult
at net.sf.saxon.event.SerializerFactory.getReceiver(SerializerFactory.java:154)
at net.sf.saxon.IdentityTransformer.transform(IdentityTransformer.java:24)
at org.springframework.xml.transform.TransformerHelper.transform(TransformerHelper.java:138)
at org.springframework.xml.transform.TransformerObjectSupport.transform(TransformerObjectSupport.java:96)
at org.springframework.ws.wsdl.wsdl11.provider.InliningXsdSchemaTypesProvider.getSchemaElement(InliningXsdSchemaTypesProvider.java:113)
at org.springframework.ws.wsdl.wsdl11.provider.InliningXsdSchemaTypesProvider.addTypes(InliningXsdSchemaTypesProvider.java:101)
at org.springframework.ws.wsdl.wsdl11.ProviderBasedWsdl4jDefinition.afterPropertiesSet(ProviderBasedWsdl4jDefinition.java:233)
at org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition.afterPropertiesSet(DefaultWsdl11Definition.java:182)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1479)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1419)

我在独立的Web应用程序中创建了一个SOAP Web服务,并且工作正常。检查原型,没有提到Saxon和变压器的类型:

com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl

将代码添加到现有(大型)Web应用程序很简单,但是当发生转换时,Transform对象的类型为:

  net.sf.saxon.IdentityTransformer

现在Saxon被部分应用程序使用,并且(可能)不能被删除。 (我已经完成了这条路线,它似乎是一堆蠕虫)。我正在使用DefaultWsdl11Definition对象来创建我的WSDL架构。我如何声明应用程序的这个方面的转换应该使用Xalan而不是Saxon?我正在使用Spring连接所有内容,而我的SOAP Web服务的servlet类是:

<bean id="projectSearch" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition">
  <property name="schema" ref="schema"/>
  <property name="portTypeName" value="ProjectSearch"/>
  <property name="targetNamespace" value="http://FOO.FOO/foo"/>
  <property name="locationUri" value="/soap/reso"/>
  <property name="requestSuffix" value="Request"/>
  <property name="responseSuffix" value="Response"/>                                   
</bean>
<bean id="schema" class="org.springframework.xml.xsd.SimpleXsdSchema">
  <property name="xsd" value="/WEB-INF/ws-project.xsd"/>
</bean>

有没有人对如何解决我的撒克逊/ Xalan问题有任何建议?

谢谢,

菲尔

0 个答案:

没有答案