У меня есть простая программа Java, как показано ниже, которая считывает файл XML и выводит его в консоли:В Java 8 префикса пространства имен получает изменен при работе с Woodstox
FileInputStream in = new FileInputStream(new File("/tmp/test.xml"));
InputStreamReader streamReader = new InputStreamReader(in);
OMXMLParserWrapper builder = BuilderUtil.getBuilder(streamReader);
SOAPEnvelope envelope = (SOAPEnvelope)builder.getDocumentElement();
//the namespace prefix is OK here (java 7 and java 8)
System.out.println(envelope.getHeader().getChildrenWithLocalName("Ticket").next());
//but after the toString() method, the prefix has modified (java 7 = not change, java 8 = change)
//attribute mustUnderstand and role
System.out.println(envelope.toString());
XML файл:
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope" xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<S:Header>
<abc:Ticket xmlns:abc="somevalue" xmlns:uebernehmeAbschlussdatenXBRL="abcSomevalue" S:mustUnderstand="true" S:role="http://www.w3.org/2003/05/soap-envelope/role/next">
<abc:value>long value</abc:value>
</abc:Ticket>
</S:Header>
<S:Body>
<sample>data</sample>
</S:Body>
</S:Envelope>
Когда я запускаю программу в Java 7 с woodstox-core-asl-4.4.1, stax2-api-3.1.4 и axiom работает нормально. Но когда я бегу то же самое в Java 8, S: роль и S: MustUnderstand разменять как окр: роль и окр: MustUnderstand (S префикс переодеться к окр)
Если удалить woodstox- core-asl-4.4.1 и stax2-api-3.1.4 из программы, он отлично работает и на Java 8.
Здесь я не могу разобраться. Означает ли это, что woodstox не поддерживает Java 8, или я пропустил что-то еще?
Пожалуйста, добавьте информацию о версии Axiom, которую вы используете, и укажите код метода 'BuilderUtil.getBuilder'. –
Я использую версию axiom 1.2.11, которая представляет собой комплект OSGi, встроенный в woodstox –
, почему я получил -1 для этого? –