#java #xml #jaxb
Вопрос:
Я хочу знать, как я могу сгенерировать следующее с помощью JAXB.
Основная проблема — наличие двух пространств имен в soapenv. Когда я создаю xml, а затем добавляю soap env, он добавляет пробелы в именах в разных строках. Это не то, чего я хочу
Проблема 2 — вместо xmlsn=»…» Я хочу xmlns:SOME_TEXT=»…», как показано ниже
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:fis="http://fis.certegy.cka.com/">
<soapenv:Body>
<fis:InquiryRequest>
<Version>1.0</Version>
<RequestUID>191919191919191</RequestUID>
<Station>1078686704</Station>
<TranType>40</TranType>
<Consumer>
<FirstName>Susie</FirstName>
<LastName>Smith</LastName>
<Address>
<Line1>100 59th</Line1>
<Line2>Ave NE</Line2>
<City>New York</City>
<State>NY</State>
<Zip>10021</Zip>
</Address>
<Phone>1114589658</Phone>
<EmailAddress>Your.Email@yahoo.com</EmailAddress>
<DateOfBirth>1960-01-01</DateOfBirth>
<ID>
<Type>NY</Type>
<Value>285756967</Value>
</ID>
<DeviceID>12345678000</DeviceID>
<DaysOfEmployment>9991</DaysOfEmployment>
<PayDate>2019-05-03</PayDate>
<PayFrequency>Weekly</PayFrequency>
</Consumer>
<Amount>70.00</Amount>
<CashBack>0</CashBack>
<GiftCard>0</GiftCard>
<Check>
<Micr>
<ExpansionType>1002</ExpansionType>
<Line>T861000016A100002106C</Line>
<Swiped>false</Swiped>
</Micr>
<Type>P</Type>
</Check>
</fis:InquiryRequest>
</soapenv:Body>
</soapenv:Envelope>
Ответ №1:
Пожалуйста, обратите внимание: я использую EclipseLink MOXY
приложение, которое является расширением JAXB
и предоставляет множество дополнительных преимуществ по сравнению с обычным JAXB
. Приведенный ниже ответ основан на MOXY
том, что я не уверен, сработает ли он даже для Standard JAXB
.
Я не уверен, правильно ли я понял вашу проблему 1. Исходя из моего понимания, когда вы решите эту problem-2
проблему, я предполагаю, что это должно решить и это. Так как это добавит все пространства имен в заголовок XML
в вашем случае soapenv:Envelope
.
Что касается вашей проблемы 2: Если вы хотите получить пользовательский prefix
для себя namespace URI
, вы можете создать Map<String, String>
файл с вашим prefix
и namespace
и передать его во marshaling
время, чтобы moxy
он автоматически обрабатывал и предоставлял prefix
заголовок to ( xmlns
) и ваш XML node
.
Map<String, String> namespaces = new HashMap<String, String>();
namespaces.put("http://schemas.xmlsoap.org/soap/envelope/", "soapenv");
namespaces.put("http://fis.certegy.cka.com/", "fis");
namespaces.put("Whatever your namespace", "SOME_TEXT");
jsonMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
jsonMarshaller.setProperty(MarshallerProperties.NAMESPACE_PREFIX_MAPPER, namespaces);
jsonUnmarshaller.setProperty(UnmarshallerProperties.JSON_NAMESPACE_PREFIX_MAPPER, namespaces);
Справочная документация