Apache cxf使用XSLTJaxbProvider作为JAXRSDataBinding

时间:2012-06-06 10:41:34

标签: apache xslt cxf

(对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上将rs提供程序插入到ws绑定中://cxf.apache.org/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异常:类b和c不知道这个上下文的类,即使我有一个空的xslt样式表我得到了xml

<as/>

我已经对每一端的配置进行了修改,并在所有地方添加了@XmlSeeAlso无济于事。

我想我要问的是我在配置中做了什么?事实上,在我尝试将rs提供程序作为ws数据绑定连接之前,它都按预期工作可能意味着它不是吗?

任何建议都非常感谢。也许有更好的方法来使用xslt /操作xml?

由于

0 个答案:

没有答案