如何在java中的soaprequest中添加http标头

时间:2012-08-22 11:10:58

标签: java soap header axis2

我尝试连接到Yahoo webservice。我按轴2生成了类。我现在面临的问题是,web服务需要标题中的特定键值对,我绝对不能这样做。我在网上搜索并找到了不同的可能性 - 它们都不适合我。最有希望的是几乎在this page结束时的帖子,Claude Coulombe是否会改变生成存根的代码,但这也失败了。任何人都可以告诉我如何解决这个问题吗?

修改

使用Options的建议方式产生了以下异常:

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 个答案:

答案 0 :(得分:4)

您可能想要使用Axis2的{​​{3}}:

// 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);

以下是该代码的Options

答案 1 :(得分:1)

如果要将HTTP标头添加到SOAP请求或响应中,则无关紧要。您应该使用MessageContext的任何一种方式。 假设msgContext是您的Axis2请求/响应消息上下文对象(org.apache.axis2.context.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);`

答案 2 :(得分:0)

两个月前我找到了解决问题的方法。您无法使用Axis2设置自定义标头。所以我回到了旧的Axisversion,你可以做到这一点。自己设置Http-header并不是一个好习惯,而且大多是不必要的。最重要的是,它不是SOAP规范的一部分。这就是为什么你不能用Axis2做的原因。

答案 3 :(得分:0)

实际上,您只需从ServiceClient检索选项引用,而不是替换选项对象。然后添加所需的属性:

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

答案 4 :(得分:0)

我也有同样的问题,解决方案是Barbiturica: 不带

添加标题选项
   // Create an instance of org.apache.axis2.client.Options
Options options = new Options();

此页面具有误导性:reference