2009-10-21 1 views
1

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

<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? Какова мотивация такого поведения интерпретации?

Спасибо!

+0

.net веб-сервисы, особенно ранние, известны в мире java, поскольку они не соответствуют спецификации и работают только в том случае, когда оба конца разговора являются .net. Они стали намного лучше в этом, но Есть еще много старых услуг, которые делают такие вещи, как урод, если префиксы не так, как ожидалось. – skaffman

ответ

1

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

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

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

+0

Благодарим за то, что вы указали мне направление! Я все еще задаюсь вопросом, может ли быть какой-нибудь файл конфигурации SAAJ или директива JRE, позволяющая управлять процессом генерации префикса. – Yuriy

Смежные вопросы