java忽略命名空间_JAXB marshlling不会忽略命名空间

我花了一些时间来调查问题是什么,但我无法解决 . 当我在XML下解组并编组时,我看到了不同的XML .

test

\MySG\test.jsp

deploy_test_page_renderingMetadata

在上面的xml中,只有一个标记(第一个)预期剩余的所有(包括命名空间)都是意外的元素 . 另一个应用程序发送上述XML .

我的映射是这样的

package com.seeta.xml;

import java.util.ArrayList;

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;

import javax.xml.bind.annotation.XmlAccessorType;

import javax.xml.bind.annotation.XmlAnyElement;

import javax.xml.bind.annotation.XmlElement;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="root")

@XmlAccessorType(XmlAccessType.FIELD)

public class Root {

@XmlElement(name="one")

private String one;

public String getOne() {

return one;

}

public void setOne(String one) {

this.one = one;

}

@XmlElement(name="three")

private String three;

@XmlAnyElement

private List remaining = new ArrayList();

public String getThree() {

return three;

}

public void setThree(String three) {

this.three = three;

}

public List getRemaining() {

return remaining;

}

public void setRemaining(List remaining) {

this.remaining = remaining;

}

public String toString() {

return String.format("One [%s]-> Number of remaing elements [%d]-> three [%s]", one, remaining.size(), three);

}

}

这是我的简单代码

package com.seeta.xml;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.IOException;

import java.io.InputStream;

import java.io.StringWriter;

import java.net.URL;

import java.net.URLDecoder;

import javax.xml.bind.JAXBContext;

import javax.xml.bind.JAXBException;

import javax.xml.bind.Marshaller;

import javax.xml.bind.Unmarshaller;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.transform.OutputKeys;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerException;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;

import org.xml.sax.InputSource;

import org.xml.sax.SAXException;

public class JaxbSample {

public Document getDOMDocument(InputStream inputStream) throws ParserConfigurationException, SAXException, IOException {

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();

documentBuilderFactory.setNamespaceAware(true);

DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();

if (inputStream != null) {

return documentBuilder.parse(new InputSource(inputStream));

} else {

return documentBuilder.newDocument();

}

}

public Root unmarshall(Document document) throws JAXBException {

JAXBContext context = JAXBContext.newInstance(Root.class);

Unmarshaller unmarshaller = context.createUnmarshaller();

Root root = (Root) unmarshaller.unmarshal(document);

return root;

}

public Document marshall(Root root) throws JAXBException, ParserConfigurationException, SAXException, IOException {

JAXBContext context = JAXBContext.newInstance(Root.class);

Marshaller marshaller = context.createMarshaller();

Document document = getDOMDocument(null);

marshaller.marshal(root, document);

return document;

}

private String transform(Document document) throws TransformerException {

StringWriter sw = new StringWriter();

TransformerFactory transformerFactory = TransformerFactory.newInstance();

Transformer transformer = transformerFactory.newTransformer();

transformer.setOutputProperty(OutputKeys.INDENT, "yes");

transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");

transformer.transform(new DOMSource(document), new StreamResult(sw));

return sw.toString();

}

public void testUnmarshallMarshallUsingDocument() throws ParserConfigurationException, SAXException, IOException, JAXBException, TransformerException {

InputStream inputStream = this.getClass().getResourceAsStream("jaxb.xml");

Document document = getDOMDocument(inputStream);

Root root = unmarshall(document);

Document documentAfterMarshal = marshall(root);

String output = transform(documentAfterMarshal);

System.out.println(output);

}

public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, JAXBException, TransformerException {

JaxbSample jaxbTest = new JaxbSample();

jaxbTest.testUnmarshallMarshallUsingDocument();

}

}

输出是

test

\MySG\test.jsp

deploy_test_page_renderingMetadata

我还试着跟随

我尝试使用NamespacePrefixMapper . 我可以给出不同的命名空间但不能为空(“”) . 我根本不需要任何名称空间 .

new NamespacePrefixMapper(){public String getPreferredPrefix(String namespaceUri,String suggestion,boolean requirePrefix){return“”; }};

我们的项目中没有任何xsd(至少我不知道)尝试不合格的东西

我真的不明白QName的事情

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值