Управление префиксами пространства имен в доступе SAAJ / raw xml в SAAJ - PullRequest
1 голос
/ 21 октября 2009

Мой клиент на основе SAAJ генерирует следующий XML и отправляет его в веб-службу .NET:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<AuthenticationHeader xmlns="http://www.w3.org/2001/XMLSchema-instance">
<Password xmlns="http://schemas.datacontract.org/2004/07/">temp123</Password>
<UserName xmlns="http://schemas.datacontract.org/2004/07/">temp321</UserName>
</AuthenticationHeader>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<GetTracks xmlns="http://tempuri.org/">
  <TrackName>baby</TrackName><ArtistID>0</ArtistID><AlbumID>0</AlbumID><Start>0</Start><Count> 20</Count>
</GetTracks></SOAP-ENV:Body></SOAP-ENV:Envelope>

Проблема, с которой я сталкиваюсь, заключается в том, что для элемента AuthenticationHeader у меня должен быть определен префикс, но он не должен добавляться в самом начале. Это именно то, что мне нужно, чтобы генерировать, чтобы не получить ошибку от веб-службы:

<AuthenticationHeader xmlns:i="http://www.w3.org/2001/XMLSchema-instance">

Если при создании имени я создаю префикс, он автоматически добавляется после атрибута xmlns и в самом начале элемента.

Я пытался поковыряться со всем пакетом javax.xml.soap, но не смог найти ничего, что могло бы помочь мне обойти это. Можете ли вы дать мне подсказку, в каком направлении идти, чтобы создать такой xml?

Кстати, мне интересно, является ли такое поведение допустимым для веб-службы, чтобы отклонить действительный xml, подобный этому? Какова мотивация для такой интерпретации поведения?

Спасибо!

1 Ответ

1 голос
/ 21 октября 2009

Java SOAP API, как правило, предполагают соответствие спецификациям службы, с которой они общаются, и поэтому такие вещи, как детальное управление префиксами, не раскрываются через API, поскольку не должно быть причин для беспокойства.

В предыдущих случаях, подобных этому, мне часто приходилось прибегать к ручному построению объекта SOAP DOM, что ужасно болезненно.

Совсем недавно мне посчастливилось получить Spring WebServices , чтобы производить именно то, что мне нужно. Он абстрагирует API-интерфейс SAAJ, в то же время, предоставляя хуки для DOM на уровне XML. Я предлагаю попробовать и посмотреть, что вы можете придумать.

...