JAXB到xml添加了xml版本标记

时间:2015-07-23 04:56:47

标签: xml jaxb mule mule-studio mule-component

在mule anypoint studio中,当我使用自定义转换器创建一个jaxb对象,然后使用JAXB到xml组件将其编组为xml时,我得到了带有xml版本标记的xml。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

因此得到的xml如下所示。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExampleXML>
</ExampleXML>

这通常不是问题,但此时我将xml添加到肥皂信封中。

结果是

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header/>
   <soapenv:Body>
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExampleXML>
    </ExampleXML>
    </soapenv:Body>
</soapenv:Envelope>

这是一个无效的请求..

是否有相同的方法将jaxb设置为xml转换器以不添加此标头?

2 个答案:

答案 0 :(得分:2)

尝试看起来与此类似的XSLT转换器。此xsl:copy基本上复制与表达式匹配的节点。在这里&#39;。&#39;指的是当前节点,实际上根节点是这里的当前节点。因此,整个XML嵌入在SOAP信封中。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header/>
    <soapenv:Body>
     <xsl:copy-of select="." />
    </soapenv:Body>
 </soapenv:Envelope> 
</xsl:template>
</xsl:stylesheet>

答案 1 :(得分:0)

当您调用marshaller时,您可以将fragment属性设置为true,这将不会生成标题。

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);