как добавить заголовок http в soaprequest в java

Я пытаюсь подключиться к веб-сервису Yahoo. Я сгенерировал классы axis2. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что веб-сервису требуется определенная пара значений ключа в заголовке, и я абсолютно не могу этого сделать. Я искал в интернете и нашел разные возможности - ни одна из них не работала для меня. Самым многообещающим был пост почти в конце на этой странице, был ли Клод Куломб подслащен, чтобы изменить код сгенерированного заглушки, но это также не удалось. Мочь кто-нибудь покажет мне, как решить эту проблему?

редактировать

предложенный способ использования опций привел к следующему исключению:

Exception in thread "main" org.apache.axis2.AxisFault: Address information does not exist in the Endpoint Reference (EPR).The system cannot infer the transport mechanism.

вот мой код:

val stub = new IndexToolsApiServiceStub("https://api.web.analytics.yahoo.com/IndexTools/services/IndexToolsApiV3")

val client = stub._getServiceClient
val options = new Options
val list = new ArrayList[Header]()
val header = new Header
header.setName("YWA_API_TOKEN")
header.setValue("NOTtheREALvalue")
list.add(header)
options.setProperty(HTTPConstants.HTTP_HEADERS, list)
client.setOptions(options)
stub._setServiceClient(client)

5 ответов


вы, вероятно, хотите использовать Axis2 ' s опции:

// Create an instance of org.apache.axis2.client.ServiceClient
ServiceClient client = ...

// Create an instance of org.apache.axis2.client.Options
Options options = new Options();

List list = new ArrayList();

// Create an instance of org.apache.commons.httpclient.Header
Header header = new Header();

// Http header. Name : user, Value : admin
header.setName("user");
header.setValue("admin");

list.add(header);
options.setProperty(org.apache.axis2.transport.http.HTTPConstants.HTTP_HEADERS, list);

client.setOptions(options);

здесь ссылка для этого кода.


не имеет значения, хотите ли вы добавить заголовки HTTP к вашему запросу или ответу SOAP. в любом случае вы должны работать с MessageContext. Предполагается, что msgContext является объектом контекста запроса/ответа Axis2 (org.апаш.в axis2.контекст.MessageContext), ниже кода будет делать трюк и с его помощью, вы можете добавить заголовки HTTP.

`//Instantiate an Options object from org.apache.axis2.client.Options
 Options options = new Options();
 //Instantiate an ArrayList of type NamedValue from org.apache.axis2.context.NamedValue
 List<NamedValue> namedValuePairs = new ArrayList<NamedValue>();
 //Add as much as headers you want using below code
 namedValuePairs.add(new NamedValue("sample", "value"));
 //Finally add namedValuePairs to options, and add options to msgContext
 options.setProperty(org.apache.axis2.transport.http.HTTPConstants.HTTP_HEADERS, namedValuePairs);
 msgContext.setOptions(options);`

Я нашел решение проблемы два месяца назад. Вы не можете установить настроенный заголовок с помощью Axis2. Поэтому я вернулся к старой Аксисверсии, где вы можете это сделать. Установка Http-заголовка самостоятельно не является хорошей практикой и в основном излишней. Сверху это не является частью спецификации SOAP. Вот почему вы не можете сделать это с Axis2.


На самом деле, вам просто нужно получить ссылку на параметры из ServiceClient вместо замены объекта options. Затем добавьте нужные свойства:

ServiceClient sc = awst._getServiceClient();
Options ops = sc.getOptions();

У меня тоже была такая же проблема, решение-это Barbiturica: добавить опцию заголовка без

   // Create an instance of org.apache.axis2.client.Options
Options options = new Options();

эта страница является missleading: ссылка