У меня есть тестовое Java-приложение:
@XmlRootElement
public class Car {
@XmlElement(namespace="http://www.example.com/CAR_NAME")
private String name;
@XmlElement(namespace="http://www.example.com/CAR_PRICE")
private int price;
@XmlElement(namespace="http://www.example.com/CAR_BUS")
private Bus bus;
//constructors, getters and setters
@XmlRootElement
public class Bus {
@XmlElement(namespace="http://www.example.com/BUS_NAME")
private String name;
@XmlElement(namespace="http://www.example.com/BUS_PRICE")
private int price;
//constructors, getters and setters
@XmlRootElement
public class Request {
@XmlAnyElement
private Element element;
//constructors, getters and setters
И я пытаюсь преобразовать строку xml в Element
, установить element
в Request
и преобразовать запрос в string
.
public class Main {
public static void main(String[] args) throws JAXBException, ParserConfigurationException, IOException, SAXException {
String hz = "<car xmlns:ns6=\"http://www.example.com/CAR_BUS\" xmlns:ns5=\"http://www.example.com/CAR_NAME\" xmlns:ns2=\"http://www.example.com/CAR_PRICE\" xmlns:ns4=\"http://www.example.com/BUS_PRICE\" xmlns:ns3=\"http://www.example.com/BUS_NAME\">\n" +
" <ns5:name>CarName1</ns5:name>\n" +
" <ns2:price>999</ns2:price>\n" +
" <ns6:bus>\n" +
" <ns3:name>BusName1</ns3:name>\n" +
" <ns4:price>666</ns4:price>\n" +
" </ns6:bus>\n" +
"</car>";
JAXBContext jaxbContext = JAXBContext.newInstance(Car.class, Bus.class, Request.class);
Marshaller marshaller = jaxbContext.createMarshaller();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Element documentElement = builder.parse(new InputSource(new StringReader(hz))).getDocumentElement();
Document document = documentElement.getOwnerDocument();
DOMImplementationLS domImplLS = (DOMImplementationLS) document.getImplementation();
LSSerializer serializer = domImplLS.createLSSerializer();
String s = serializer.writeToString(documentElement);
System.out.println(s);
System.out.println("------------------------------");
Request request = new Request(documentElement);
StringWriter sw = new StringWriter();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(request, sw);
String s1 = sw.toString();
System.out.println(s1);
}
}
Когда я запускаю это приложение на своем компьютере, я получаю следующий вывод:
<?xml version="1.0" encoding="UTF-16"?>
<car xmlns:ns2="http://www.example.com/CAR_PRICE" xmlns:ns3="http://www.example.com/BUS_NAME" xmlns:ns4="http://www.example.com/BUS_PRICE" xmlns:ns5="http://www.example.com/CAR_NAME" xmlns:ns6="http://www.example.com/CAR_BUS">
<ns5:name>CarName1</ns5:name>
<ns2:price>999</ns2:price>
<ns6:bus>
<ns3:name>BusName1</ns3:name>
<ns4:price>666</ns4:price>
</ns6:bus>
</car>
------------------------------
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<request xmlns:ns6="http://www.example.com/CAR_BUS" xmlns:ns5="http://www.example.com/CAR_NAME" xmlns:ns2="http://www.example.com/CAR_PRICE" xmlns:ns4="http://www.example.com/BUS_PRICE" xmlns:ns3="http://www.example.com/BUS_NAME">
<car>
<ns5:name>CarName1</ns5:name>
<ns2:price>999</ns2:price>
<ns6:bus>
<ns3:name>BusName1</ns3:name>
<ns4:price>666</ns4:price>
</ns6:bus>
</car>
</request>
Но когда я запускаю это приложение на тестовом компьютере, я получаю следующий вывод:
<?xml version="1.0" encoding="UTF-16"?>
<car xmlns:ns2="http://www.example.com/CAR_PRICE" xmlns:ns3="http://www.example.
com/BUS_NAME" xmlns:ns4="http://www.example.com/BUS_PRICE" xmlns:ns5="http://www.example.com/CAR_NAME" xmlns:ns6="http://www.example.com/CAR_BUS">
<ns5:name>CarName1</ns5:name>
<ns2:price>999</ns2:price>
<ns6:bus>
<ns3:name>BusName1</ns3:name>
<ns4:price>666</ns4:price>
</ns6:bus>
</car>
------------------------------
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<request xmlns:ns6="http://www.example.com/CAR_BUS" xmlns:ns5="http://www.example.com/CAR_NAME" xmlns:ns2="http://www.example.com/CAR_PRICE" xmlns:ns4="http://www.example.com/BUS_PRICE" xmlns:ns3="http://www.example.com/BUS_NAME">
<car>
<name>CarName1</name>
<price>999</price>
<bus>
<name>BusName1</name>
<price>666</price>
</bus>
</car>
</request>
На тестовой машине отсутствуют метки ns5, ns6, ns2
Я не понимаю, как это может быть. Та же версия Java, то же приложение, но другой вывод. Из-за этого у меня проблемы на рабочем сервере. Как это исправить или где найти причину?