(对于 stackoverflow 上的链接断开表示歉意,将新用户限制为一篇文章中的 2 个!)
我已经使用 Spring STS 和 MyEclipse for spring 搭建了一个 Web 服务服务器,并且对转换输出的肥皂消息很感兴趣。
我要转换的第一件事是命名空间前缀,所以我的 spring 配置看起来像这样
<jaxws:endpoint xmlns:tns="ttps://etc etc">
<jaxws:dataBinding>
<ref bean="data-binding"/>
</jaxws:dataBinding>
</jaxws:endpoint>
<bean ref="data-binding" class="org.apache.cxf.jaxb.JAXBDataBinding">
<property name="namespaceMap">
<map>
<entry>
<key>
<value>ttp://thing</value>
</key>
<value>BeepBeep</value>
</entry>
</map>
</property>
</bean>
这工作得很好,我的肥皂信息完全正确地输出了。
<as>
<b>
<stuff/>
</b>
<c>
<more stuff/>
</c>
</as>
其次,我需要更改soap xml,但不仅仅是http://cxf.apache.org/docs/transformationfeature.html允许的转换功能
所以我在http://cxf.apache.org/docs/jax-rs-advanced-xml.html阅读了有关 XSLTJaxbProvider 的信息,并在 ttp://cxf.apache.org/ 将 rs 提供程序插入到 ws 绑定docs/jax-rs-data-bindings.html#JAX-RSDataBindings-CXFDataBindingsasJAXRSproviders 创建以下配置
<jaxws:endpoint xmlns:tns="ttps://etc etc">
<jaxws:dataBinding>
<ref bean="jaxrs-data-binding"/>
</jaxws:dataBinding>
<bean id="jaxrs-data-binding" class="org.apache.cxf.jaxrs.provider.JAXRSDataBinding">
<property name="namespaceMap">
<map>
<entry>
<key>
<value>ttp://thing</value>
</key>
<value>BeepBeep</value>
</entry>
</map>
</property>
<property name="provider" ref="xsltProvider"/>
<bean id="xsltProvider" class="org.apache.cxf.jaxrs.provider.XSLTJaxbProvider">
<property name="outTemplate" value="classpath:/WEB-INF/templates/transform.xsl"/>
</bean>
现在我得到一个 JAXB Exception: Class not known to this context for classes b and c 即使我有一个空的 xslt 样式表,我也会得到 xml
<as/>
我已经对配置进行了修改,并在各处添加了@XmlSeeAlso,但无济于事。
我想我不得不问我在配置中做了什么?在我尝试将 rs 提供程序作为 ws 数据绑定连接之前,这一切都按预期工作,这一事实可能意味着它不是?
非常感谢任何建议。也许有更好的方法来使用 xslt/操纵 xml?
谢谢