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)