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

JAXB解组更改命名空间

东方方伟
2023-03-14

我有一个为安全令牌构建的XML。这些包含基于WS-Trust的名称空间,但是当我解组这个XML以创建< code > RequestSecurityTokenResponseCollection 对象时,它用< code>ns1 、< code>ns2 、< code>ns3等名称空间替换了这些名称空间。

是否有一种方法可以在不更改输入XML中的名称空间和名称空间前缀的情况下解组XML?

这是我一直尝试的方式:

class XMLReaderWithoutNamespace extends StreamReaderDelegate
{
    public XMLReaderWithoutNamespace(XMLStreamReader reader)
    {
        super(reader);
    }

    @Override
    public String getAttributeNamespace(int arg0)
    {
        return "";
    }

    @Override
    public String getNamespaceURI()
    {
        return "";
    }
}

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            Source xmlSource = new DOMSource(inputXML);
            Result outputTarget = new StreamResult(outputStream);
            TransformerFactory.newInstance().newTransformer().transform(xmlSource, outputTarget);
            InputStream is = new ByteArrayInputStream(outputStream.toByteArray());
            XMLStreamReader xsr = XMLInputFactory.newFactory().createXMLStreamReader(is);
            XMLReaderWithoutNamespace xr = new XMLReaderWithoutNamespace(xsr);

            JAXBContext jc = JAXBContext.newInstance(RequestSecurityTokenResponseCollectionType.class);
            Unmarshaller unmarshaller = jc.createUnmarshaller();
            JAXBElement<RequestSecurityTokenResponseCollectionType> root = (JAXBElement<RequestSecurityTokenResponseCollectionType>) unmarshaller
                .unmarshal(new StreamSource(new StringReader(sb.toString())));
        response = root.getValue();

我的包裹信息。java是

@javax.xml.bind.annotation.XmlSchema(namespace = "http://docs.oasis-open.org/ws-sx/ws-trust/200512", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package org.oasis_open.docs.ws_sx.ws_trust._200512;

共有1个答案

吉鸿宝
2023-03-14

我通过基于我的对象工厂构建整个安全令牌来解决这个问题。使用JAXBmarshall每个元素。这为最终的<code>响应

 类似资料:
  • 我的代码如下: 我怎样才能让它工作?如果我的xml标记有一些相关元素,如上面的“xmlns”,则JAXB解组器会抛出异常。 这是我第一次这么做,所以我对JAXB、解编等都一无所知。我在苦苦挣扎任何帮助都是好的。 编辑StackTrace:

  • 当我试图使用包含名称空间的JAXB将xml转换为Java对象时,会发生错误。 示例示例:' Zeta Walnes ` 我需要忽略名称空间

  • 使用JAXB编组时,我是否会影响将声明命名空间/命名空间前缀的元素? 目前,所有名称空间前缀都在根元素处声明,但由于处理XML的系统的奇怪限制,我需要在子元素处声明它们(这仍然会导致有效的XML文档)。 在2006年,一位开发人员曾向官方jaxb问题跟踪器提出过一个类似但不完全相同的请求,但拒绝了。我想知道这一情况是否同时发生了变化,或者是否存在一些解决方法。 任何帮助是值得赞赏的。 例子: JA

  • 问题内容: 这是我的xml,需要将其转换为Java。我用过jaxb 并引发以下异常javax.xml.bind.UnmarshalException:意外元素(uri:“ http://www.ae.com/Event/Load ”,本地:“ Order”)。期望的元素是<{} lm:Order> 这是我的解组代码 订购Pojo班 您能否也帮助我阅读,当前正在读取文件,需要读取为XML Strin

  • 在JAXB将xml文件解组以请求对象并将其发送给servis时,我遇到了一些问题。 它返回错误而不是正确的响应-。 我正在使用下一个模式: 带有测试日期的xml文件= 以下是源xml文件: 我使用JAXB解析并转换到我的RQ对象。 它返回奇怪的错误而不是响应。 我只是将未解析的请求写入xml文件: 它有很多讨厌的ns1:nameprefix。 我想知道如何在没有冗余前缀的情况下解组?

  • 我有一个xml,我正在尝试解体。它失败,因为它缺少必需的命名空间。 需要成为: 这个NamespaceFilter的例子只处理一个名称空间。我需要一个将追加两个名称空间。