КАК переопределить заголовки запроса Axis2 для веб-службы .NET?

Я должен использовать стороннюю веб-службу, реализованную в .NET 2.0 (конечно, в IIS).

Мне нужно сделать java-клиент. Я использую wsdl2java для создания заглушки SOAP.

Поскольку исходный проект Apache Axis теперь не поддерживается, и у меня возникли проблемы с анализом некоторых ответов от службы, я преобразовал клиент для использования последней (1.5) версии Axis2. Теперь служба .NET даже не распознает мои запросы.

Мне удалось отключить «разбиение на фрагменты» (где «заглушка» — это переменная типа MumbleStub, сгенерированная wsdl2java, и здесь я показываю несколько строк кода как одну ужасную строку):

stub._getServiceClient().getOptions().setProperty( HTTPConstants.CHUNKED, Boolean.FALSE);

.. так что, по крайней мере, служба распознает мой запрос КАК запрос, хотя и плохой: "HTTP/1.1 400 Bad Request" теперь является ответом (в отличие от "вступительной/краткой" страницы, предлагающей мне ссылку на WSDL).

Я заметил, что запрос Axis ("1") имеет другой заголовок Content-TYpe (text/xml, vs application/soap-xml), и мне интересно, как изменить этот заголовок запроса, если это действительно проблема.

Кстати, у кого-нибудь еще была эта проблема? Является ли проблема действительно (неотображаемой здесь, так как это выглядит как "внедрение элемента" в движок блога)... версия xml-"1.0"... "метатег вступления XML", который Axis2 добавила в начало запроса?

WS-Deathstar, действительно.


person Roboprog    schedule 24.06.2009    source источник
comment
вы могли бы опубликовать такие вещи, чтобы сказать pastebin или тому подобное. или отметьте их как код, который позволит вам публиковать что угодно   -  person jitter    schedule 25.06.2009
comment
Кстати. Я говорю о неотображаемой части   -  person jitter    schedule 25.06.2009


Ответы (1)


Поскольку вы упоминаете другой заголовок типа контента, я предполагаю, что ваш клиент пытается отправлять запросы SOAP 1.2, а стороннее приложение понимает только SOAP 1.1.

Попробуйте изменить используемую версию мыла, поскольку AFAIK AXIS2 по умолчанию использует SOAP 1.2.

stub._getServiceClient().getOptions().setSoapVersionURI(org.apache.axiom.soap.SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
person jitter    schedule 24.06.2009
comment
Ну, это похоже на ответ, но мне нужно сделать некоторую очистку (лишняя чушь log4j), чтобы убедиться, что я не поменял местами проблемы. БЛАГОДАРНОСТЬ! - person Roboprog; 25.06.2009
comment
Теперь он делает все то же самое, что и старый клиентский код Axis, без регрессий. Надеюсь, Axis2 решит некоторые другие проблемы, с которыми я столкнулся. - person Roboprog; 25.06.2009
comment
эй, если нет. просто попытай счастья с другим вопросом :) - person jitter; 25.06.2009