1

(对于 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?

谢谢

4

0 回答 0