2012-03-13 30 views
6

Hola Tengo problemas que estoy tratando de aprender services.I reparador creado un servicio web utilizando JAX-RS que se muestra a continuaciónLeer mensaje cabeceras http

@Path("/users") 
public class Welcome { 
@POST 
@Consumes("text/xml") 
@Produces("text/xml") 
public Response welcome(String incomingXML){ 
return Response.status(200).entity("timestamp : " + incomingXML).build(); 
} 
} 

utilizo el siguiente cliente de prueba para probar el servicio

public class TestService { 
public static void main(String args[]) throws ParserConfigurationException, SAXException, IOException { 
ClientConfig config = new DefaultClientConfig(); 
Client client=Client.create(config); 
WebResource service=client.resource(getBaseURI()); 
String urlString = "http://localhost:8080/JaXRSDemo/rest/users"; 
URL url = new URL(urlString); 
HttpURLConnection con = (HttpURLConnection) url.openConnection(); 

// set up url connection to get retrieve information back 
con.setRequestMethod("POST"); 
con.setDoInput(true); 

// stuff the Authorization request header 
byte[] encodedPassword = (userName + ":" + password).getBytes(); 

con.setRequestProperty("Authorization",encodedPassword.toString()); 
Customer customer=new Customer(); 
customer.setName("noobstre"); 
customer.setPin(123455); 

ClientResponse response=service.path("rest").path("users").type(MediaType.APPLICATION_XML).post(ClientResponse.class,customer); 
System.out.println(" response " + response.getEntity(String.class)); 
} 
private static URI getBaseURI() { 
return UriBuilder.fromUri("http://localhost:8080/JaXRSDemo").build(); 
} 
} 

quiero usar la contraseña en la cabecera en el lado del servidor y realizar una búsqueda con el problema database.The estoy enfrentando es ¿cómo puedo leer los encabezados en el servidor.

Respuesta

7

Lo resuelto mediante Jersey cliente

// clientside

ClientConfig config = new DefaultClientConfig(); 
    Client client = Client.create(config); 
    final String userName = "admin"; 
    final String password = "admin"; 
    String cred = userName + ":" + password; 
    WebResource service = client.resource(getBaseURI()); 

    Customer customer = new Customer(); 
    customer.setName("noob"); 
    customer.setPin(123455); 
    ClientResponse response = service.path("rest").path("users") 
      .accept(MediaType.APPLICATION_XML) 
      .header("Authorization", cred) 
      .post(ClientResponse.class, customer); 

    System.out.println(" response " + response.getEntity(String.class)); 

En el lado del servidor

@Path("/users") 
public class Welcome { 

@POST 
@Consumes(MediaType.APPLICATION_XML) 
@Produces(MediaType.APPLICATION_XML) 
public Response welcome(String incomingXML, @Context HttpHeaders headers) { 

    String s = headers.getRequestHeaders().getFirst("authorization"); 

    return Response.status(200).entity("timestamp : " + incomingXML + s) 
      .build(); 
} 

}

10

No estoy muy familiarizado con JAX-RS, pero es posible utilizar los siguientes métodos para obtener la información de cabecera que está buscando:

1.) Uso @HeaderParam

/**Server side******/ 
@Path("/users") 
public class Welcome { 

    @POST 
    @Consumes("text/xml") 
    @Produces("text/xml") 
    public Response welcome(String incomingXML, @HeaderParam("Authorization") String authString) 
    { 
     //Use authString here 
     return Response.status(200).entity("timestamp : " + incomingXML).build(); 
    } 
} 

2.) Utilice @Context

/**Server side******/ 
@Path("/users") 
public class Welcome { 

    @POST 
    @Consumes("text/xml") 
    @Produces("text/xml") 
    public Response welcome(String incomingXML, @Context HttpHeaders headers) 
    { 
     //Get Authorization Header 
     String authString = headers.getRequestHeader("Authorization").get(0); 

     return Response.status(200).entity("timestamp : " + incomingXML).build(); 
    } 
} 

Espero que esto ayude!

+0

gracias MRDC por la pista! –

Cuestiones relacionadas