JBoss Community

Re: How can I resolve "General web Service security error"?

created by Fernando Lozano in JBoss AS Documentation - View the full discussion

Hi Alessio,

 

I followed your hints, jboss-ws and cxf docs the best as I coud, and took a look to the testcases your provided the links. Nothing worked. My goal is getting the simpler working consumer for a WS-Security Username Token enabled service.

 

I'm using jboss as 7.1.1 and eclipse juno SR1 under Fedora 17 and with jboss-tools-4.0.0-beta1 and OpenJDK7.

 

Started from a working sample internet service, avaibable online as http://parabank.parasoft.com/parabank/services/store-wss-01?wsdl (info about the sampe at http://parabank.parasoft.com/parabank/services.htm).

 

It looks the WSDL from that service nas no WS-Policy definitions, but I can consume it using SoapUI and setting the request property WSS-Password Type to "PasswordText".

 

Used Eclipse/JBoss Tools wizzards to create a sample client. The client is a Java SE app, although it is inside a Dynamic Web Project. Added cfx and wss4j jars from jboss to the project classpath, so I can get CXF classes. It doesn't worked with or without the handler.

 

Here's the code:

 

package testwsse.bookstore.auth.clientsample;

 

import java.util.List;

 

import javax.xml.ws.BindingProvider;

import org.apache.cxf.ws.security.SecurityConstants;

 

import testwsse.bookstore.auth.*;

 

 

public class ClientSample {

 

    public static void main(String[] args) throws java.lang.Exception {

            System.out.println("***********************");

            System.out.println("Create Web Service Client...");

            Bookstore_Service service1 = new Bookstore_Service();

            System.out.println("Create Web Service...");

            Bookstore port1 = service1.getCartServicePort();

           

            System.out.println("Configuring WS-Security...");           

           

            //XXX won't work

            ((BindingProvider)port1).getRequestContext().put(SecurityConstants.USERNAME, "soatest");

            ((BindingProvider)port1).getRequestContext().put(SecurityConstants.PASSWORD, "soatest");

           

            //XXX won't work either, callback is never called

            //((BindingProvider)port1).getRequestContext().put(SecurityConstants.USERNAME, "soatest");

            //((BindingProvider)port1).getRequestContext().put(SecurityConstants.CALLBACK_HANDLER,

            //      "testws.bookstore.auth.clientsample.UsernamePasswordCallback");

           

 

            System.out.println("Call Web Service Operation...");

           

            List<Book> livros = port1.getItemByTitle("Java");

            System.out.println("Found: " + livros.size() + " books.");

            for (Book livro : livros) {

                System.out.println("Book Title: " + livro.getName());

                for (String autor: livro.getAuthors()) {

                    System.out.println("Author: " + autor);

                }

            }

           

            System.out.println("***********************");

            System.out.println("Call Over!");

    }

}

 

 

And here's the result:

 

***********************

Create Web Service Client...

Create Web Service...

Configuring WS-Security...

Call Web Service Operation...

Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: An error was discovered processing the <wsse:Security> header

    at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:178)

    at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:111)

    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:108)

    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)

    at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:129)

    at $Proxy32.getItemByTitle(Unknown Source)

    at testwsse.bookstore.auth.clientsample.ClientSample.main(ClientSample.java:34)

Reply to this message by going to Community

Start a new discussion in JBoss AS Documentation at Community