【问题标题】:JAXB to xml adds xml version tagJAXB to xml 添加 xml 版本标签
【发布时间】:2015-07-24 15:39:27
【问题描述】:

在 mule anypoint 工作室中,当我使用自定义转换器创建一个 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 转换器以不添加此标头?

【问题讨论】:

  • 你如何将 xml 添加到肥皂信封中?你在使用 XSLT 转换器吗?
  • 我尝试使用 xslt 转换器但只能返回 xml 的值。我将如何选择并返回整个 xml?

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


【解决方案1】:

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

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);

【讨论】:

  • 如果我在 java 代码中编组,那会起作用,但是我使用 jaxb to xml mule 组件来编组 jaxb 对象。
【解决方案2】:

试试看起来与此类似的 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    相关资源
    最近更新 更多