在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转换器以不添加此标头?
答案 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);