2

我正在尝试将 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 服务的原型,它运行良好。检查原型,没有提到撒克逊人,变压器的类型是:

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>

有人对如何解决我的 Saxon / Xalan 问题有任何建议吗?

谢谢,

菲尔

4

0 回答 0