JAXB 到 xml 添加 xml 版本标签

JAXB to xml adds xml version tag

在 mule anypoint studio 中,当我使用自定义变换器创建 jaxb object 然后使用 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 转换器以不添加此 header?

当您调用编组器时,您可以将片段 属性 设置为 true,这将不会生成 header。

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);

尝试看起来与此类似的 XSLT 转换器。这个 xsl:copy 基本上复制了与表达式匹配的节点。这里 '。'指的是当前节点,其实根节点就是这里的当前节点。因此,整个 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>