views:

23

answers:

1

I have a Web Service developed with JAX-WS. I have secured the web service with BASIC authentication configured in Tomcat.

When I try to access the web service using a Java client, I first need to create the port, and then specify the credentials, as follows:

CustomerServiceClient customerServiceClient = new CustomerServiceBottomUpService(); //1
CustomerService customer = customerServiceClient.getCustomerServicePort(); //2

Map<String, Object> context = ((BindingProvider) customer).getRequestContext(); //3
context.put(BindingProvider.USERNAME_PROPERTY, "kermit"); //4
context.put(BindingProvider.PASSWORD_PROPERTY, "thefrog"); //5

The problem I have is that, after line 1, I get an Authorization error (HTTP 401) as I obviously haven't provided the server with the credentials yet.

I am creating the client artifacts from a server WSDL, hence the authentication problem when creating the service, and don't want my clients to store the WSDL locally as it's just annoying for them. How can I get around this problem?

A: 

BindingProvider.USERNAME_PROPERTY, BindingProvider.PASSWORD_PROPERTY are used primarily for service requests. When you instantiate Service, it fetches WSDL and the server is returning 401. You could try any one of the following solutions:

*

  Use java.net.Authenticator class in your client application.
*

  Provide a local access to the WSDL using catalog.
*

  Configure web.xml to allow GET requests without authentication. 

reference java.boot.by

mezzie
Thanks for the reply. Not a very big fan of either the Authenticator or the catalog thing, and the service is accessed using always GET. Can it be modified to accept only POST HTTP requests?
Anonimo