The logging issue is an interceptor ordering issue that Dan has just fixed on trunk. With regards to the password callback issue, could you create a test-case that I could take a look at? I don't see anything obviously wrong in the code you pasted.
Colm. On Thu, Aug 21, 2014 at 7:16 PM, venkatesham nalla <[email protected]> wrote: > Hi Colm, > I have tested with CXF 3.0.1 as well and results are same.The SOAP Request > and Password Callback code are included below. > Yes I have enabled the logging, which does not log outbound message on the > client side when WSS4JStaxOutInterceptor is used. However the inbound > message is getting logged. > SOAP Request: > <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> > <soap:Header> <wsse:Security xmlns:wsse=" > http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" > soap:mustUnderstand="1"> <wsse:UsernameToken xmlns:wsu=" > http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" > wsu:Id="G0174fea5-ef7f-435e-8d5f-36a3143ffaa4"> > <wsse:Username>theUserName</wsse:Username> > <wsse:Password Type=" > http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">thePassword</wsse:Password> > </wsse:UsernameToken> </wsse:Security> > </soap:Header> <soap:Body> <TwowayStructStringRequest xmlns=" > http://test.com/struct/xsd"> <PerfStructStringArrayVal> > <Item> > <StringVal>String</StringVal> > <DoubleVal>18446744073709551616</DoubleVal> > <FloatVal>4294967296</FloatVal> > <CharVal>a</CharVal> > <LongVal>4294967296</LongVal> > <ShortVal>65536</ShortVal> </Item> > </PerfStructStringArrayVal> </TwowayStructStringRequest> > </soap:Body></soap:Envelope> > Password Callback Code (this code works with WS-SecurityPolicy as well as > WSS4J old interceptors. > public class ServerPasswordCallback implements CallbackHandler { > private Map<String, String> passwords = new HashMap<String, > String>(); > public ServerPasswordCallback() { passwords.put("theUserName", > "thePassword"); passwords.put("abcd", "dcba"); } > /** * Here, we attempt to get the password from the private * > alias/passwords map. */ public void handle(Callback[] callbacks) > throws IOException, UnsupportedCallbackException { for (int i = 0; i > < callbacks.length; i++) { WSPasswordCallback pc = > (WSPasswordCallback)callbacks[i]; > String pass = passwords.get(pc.getIdentifier()); > if (pass == null) { throw new SecurityException > ("The UsernameToken '"+pc.getIdentifier()+"' can not be authenticated."); > } else if (pass != null) { > pc.setPassword(pass); return; } } > // // Password not found // throw new > IOException(); } > /** * Add an alias/password pair to the callback mechanism. > */ public void setAliasPassword(String alias, String password) { > passwords.put(alias, password); }} > Client configuration with WSS4JStaxOutInterceptor: > <jaxws:client name="..." createdFromAPI="true"> > <jaxws:outInterceptors> <bean > class="org.apache.cxf.ws.security.wss4j.WSS4JStaxOutInterceptor"> > <constructor-arg> > <map> <entry key="action" > value="UsernameToken"/> <entry > key="user" value="theUserName"/> > <entry key="passwordType" value="PasswordText"/> > <entry key="passwordCallbackRef" > value-ref="clientCallback"/> </map> > </constructor-arg> </bean> > </jaxws:outInterceptors> </jaxws:client> <bean id="clientCallback" > class="com.att.cio.rpcperf.client.ClientPasswordCallback"/> <cxf:bus> > <cxf:features> <cxf:logging/> > </cxf:features> </cxf:bus> > Thanks,Venkat > > > Date: Thu, 21 Aug 2014 16:33:03 +0100 > > Subject: Re: WSS4JStax interceptor issues in Apache CXF 3.0.0 > > From: [email protected] > > To: [email protected] > > > > Hi, > > > > > 1) The client with WSS4JStaxOutInterceptor (WSS4J-2.0.0) is not > > working. It is throwing the exception. > > > > It was a bug in WSS4J 2.0.0 (SOAP schemas were not included), fixed in > > WSS4J 2.0.1. > > > > > 2) I replaced the WSS4J 2.0.0 jar’s with WSS4J 2.0.1 jar and the > > client side works fine. However with 2.0.0 and 2.0.1 the server > side > code > > was not getting the User Name in password callback handler when > > WSS4JStaxInInterceptor used, basically > > > “getIdentifier” method returns an empty string. Everything works fine > > with old WSS4J interceptors as well as WS-SecurityPolicy. > > > > This seems odd. Could you paste in what the UsernameToken from the > message > > looks like, what the CallbackHandler implementation looks like? > > > > > 3) WSS4JStaxOutInterceptor does not log the outbound message when > > the logging enabled. > > > > Do you mean that if you enable the CXF logging interceptors, it doesn't > log > > the message? WSS4JStaxOutInterceptor itself doesn't log the message. > > > > Colm. > > > > On Wed, Aug 20, 2014 at 7:22 PM, NALLA, VENKAT <[email protected]> wrote: > > > > > Hi Colm, > > > > > > > > > > > > I am using Apache CXF version 3.0.0 and testing JAX-WS services with > > > WS-Security UsernameToken profile with plain password, and running in > to > > > following issues. Appreciate if you could help in resolving these > issues. > > > > > > > > > > > > 1) The client with WSS4JStaxOutInterceptor (WSS4J-2.0.0) is not > > > working. It is throwing the exception. > > > > > > a. Exception using Oracle JDK 7 on Windows 7 desktop in the > > > attached file “OracleJDK7WSS4J-2.0.0-ClientException on Win7.txt” > > > > > > b. Exception using IBM JDK 7 on AIX in the attached file > > > “IBMJDK7-WSS4j-2.0.0ClientException on AIX.txt” > > > > > > > > > > > > 2) I replaced the WSS4J 2.0.0 jar’s with WSS4J 2.0.1 jar and the > > > client side works fine. However with 2.0.0 and 2.0.1 the server side > code > > > was not getting the User Name in password callback handler when > > > WSS4JStaxInInterceptor used, basically “getIdentifier” method returns > an > > > empty string. Everything works fine with old WSS4J interceptors as > well as > > > WS-SecurityPolicy. > > > > > > 3) WSS4JStaxOutInterceptor does not log the outbound message when > > > the logging enabled. > > > > > > > > > > > > The server configuration: > > > > > > <jaxws:endpoint name="…" createdFromAPI="true"> > > > > > > <jaxws:inInterceptors> > > > > > > > > > > > > <bean class=" > > > org.apache.cxf.ws.security.wss4j.WSS4JStaxInInterceptor"> > > > > > > < > > > constructor-arg> > > > > > > > > > <map> > > > > > > > > > <entry key="action" value="UsernameToken"/> > > > > > > > > > <entry key="passwordType" value="PasswordText"/> > > > > > > > > > <entry key="passwordCallbackClass" value="...ServerPasswordCallback"/> > > > > > > > > > </map> > > > > > > </ > > > constructor-arg> > > > > > > </bean> > > > > > > </jaxws:inInterceptors> > > > > > > </jaxws:endpoint> > > > > > > > > > > > > Thanks, > > > > > > Venkat > > > > > > -- > > > Colm O hEigeartaigh > > > > > > Talend Community Coder > > > http://coders.talend.com > > > > > > > -- Colm O hEigeartaigh Talend Community Coder http://coders.talend.com
