2012-08-22 22 views
6

Intento conectarme a un servicio web de Yahoo. Genere las clases por axis2. El problema al que me enfrento ahora es que el servicio web requiere un par de valores clave específicos en el encabezado y no puedo hacerlo. Busqué en la web y encontré diferentes posibilidades, ninguna de ellas funcionó para mí. Lo más prometedor fue la publicación casi al final de this page, donde Claude Coulombe fue sugerido para cambiar el código del stub generado, pero esto también falló. ¿Alguien puede mostrarme una forma de resolver este problema?cómo agregar un encabezado http a una solicitud en java en java

Editar

La forma sugerida usando las opciones produce la siguiente excepción:

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. 

Aquí está mi código:

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) 
+0

Supongo que su pregunta es acerca de los encabezados HTTP (no HTML). Es posible que desee corregir el error tipográfico ... –

+0

Disculpe, tiene razón. –

Respuesta

0

Encontré una solución para el problema hace dos meses. No puede establecer un encabezado personalizado con Axis2. Así que volví a la antigua versión de Axis, donde puedes hacerlo. Configurar el encabezado Http usted mismo no es una buena práctica y, en general, innecesario. Además, no es parte de la especificación SOAP. Esa es la razón por la que no puedes hacerlo con Axis2.

4

Es posible que desee utilizar Axis2 's Options:

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

Aquí está el reference para ese código.

0

En realidad, solo tiene que recuperar la referencia de opciones del ServiceClient en lugar de reemplazar el objeto de opciones. A continuación, añadir las propiedades que desea:

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

yo también tenía el mismo problema que la solución es la de Barbiturica: opción de adición de cabecera sin

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

esta página se missleading: reference

1

Se no importa si desea agregar encabezados HTTP a su solicitud o respuesta SOAP. De cualquier forma, deberías trabajar con MessageContext. Suponiendo que msgContext es su objeto de Contexto de mensaje de solicitud/respuesta Axis2 (org.apache.axis2.context.MessageContext), el siguiente código hará el truco y, al usarlo, puede agregar encabezados 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);` 
Cuestiones relacionadas