当前位置: 首页 > 知识库问答 >
问题:

JAXB封送删除名称空间前缀

缑永年
2023-03-14
class MyNamespaceMapper extends NamespacePrefixMapper {
    private static final String URI = "http://www.examples/webservice/";   

    @Override
    public String getPreferredPrefix(String namespaceUri, String suggestion, 
      boolean requirePrefix) {
        if(URI.equals(namespaceUri)) {
            return "";
        }
        return suggestion;
    }
}

2)如果我按照下面的方式编辑package-info,那么它是很好的,但是问题是我创建的是一个JAXB整数元素如下所示,前缀删除没有应用于这些元素

JAXBElement<Integer> jaxBInteger = new JAXBElement<Integer>(
                            new QName("http://www.example.com/", "age",""),30);
                    pax.setAge(jaxBInteger);

<Login Password="" Email=""/>
        <Paxes>
            <Pax IdPax="1">
                <ns2:Age>30</ns2:Age>
            </Pax>
            <Pax IdPax="2">
                <ns2:Age>30</ns2:Age>
            </Pax>
        </Paxes>
    </Login>

共有1个答案

曾骁
2023-03-14

是的,把前缀替换为“空”似乎很棘手,你可以看到我的问题。我确实找到了在XML生成之后使用xslt进行转换的解决方案,如下所示。希望有帮助。

RemoveNameSpace.xslt

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
     <xsl:preserve-space elements="*"/>

    <xsl:template match="@*|node()[not(self::*)]">
        <xsl:copy />
    </xsl:template>

    <xsl:template match="*">
        <xsl:element name="{local-name()}">
            <xsl:apply-templates select="node()|@*" />
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

XSLT转换器

    File outputXML = new File(inputXML.getParentFile(), inputXML.getName() + "-ns.xml");

    try{ 
    TransformerFactory factory = TransformerFactory.newInstance();
    Source xslt = new StreamSource(new File(REMOVE_NAMESPACE_XSL));
    Transformer transformer = factory.newTransformer(xslt);

    Source text = new StreamSource(inputXML);
    transformer.transform(text, new StreamResult(outputXML));

    }
    catch(Exception e){
        // something gone wrong. return original XML.
        return inputXML;
    }
 类似资料:
  • 我正在开发一个客户端来使用 Web 服务,但由于某种原因,除非所有命名空间都正确且没有任何前缀,否则我的请求没有得到正确处理。 我所有的类都是由服务提供商使用提供的XSD和WSDL创建的。 NfeDadosMsg.class 包装信息.java TConsStatServ.class package br.inf.portalfiscal.nfe; 包装信息.java 输出xml: 由于某种原因,

  • 我有从一个模式创建的JAXB对象。在封送过程中,使用NS2对xml元素进行注释。对于这个问题,我已经尝试了网络上存在的所有选项,但没有一个可行。我不能修改我的模式或更改package-info.java。请帮忙

  • 我有5个schemas.xsd,用于生成Java类,然后封送XML文件。 问题是只有一种情况--对于这个文件,JAXB生成额外的名称空间前缀NS2。这是非常奇怪的,因为所有模式都是相同的,并且编组机制对于所有模式都是通用的。 生成机制: 对于不能正常工作的包: 包信息: 对象-工厂 良好工作包: 包信息: 和对象工厂看起来完全一样(当然除了命名)。

  • 我花了一些时间来调查是什么问题,但我不能解决它。当我在XML下面反封送和回封送时,我看到的是不同的XML。 在上面的xml中,只有一个标记(第一个),其余所有(包括名称空间)都是意外元素。另一个应用程序发送上述XML。 null 我真的不明白QName的事

  • 面临使用JAXB解组的问题。我需要使用多个名称空间。Java类是为第三方提供的XSD生成的。因此,我不想在Java类中的XMLRootElement指定名称空间,也不想手动更改多个类。 编组逻辑如下: xmlelement类TokenRequest.java BasicInRequestType.java 我在package-info.java中指定了前缀 TokenRequest元素实际上引用了

  • 我正在写一个实用程序之间的集成内部系统和第三方产品。我试图生成一个可以由第三方产品加载的xml文件,但我很难按照他们的要求生成xml。我已经创建了一个简化的版本,只是为了测试。 预期产出应如下: 我的代码如下: 主要: 课程类别: