Finally it worked! I've just tested the SANPSHOT built on May 9th and the issue is completely fixed. Many thanks for your support ;-) Marco
dkulp wrote: > > On Fri May 8 2009 2:31:56 am marcob wrote: >> I've tested the latest SNAPSHOT (May 7th). >> The result now is that the string "lucy&mary" is read as >> "lucymary"... >> not completely correct but much better than before! >> If the issue might be solved by modifying something in my classpath, >> please >> let me know. > > OK. I see what I did. The second text node is getting lost. > Basically, > the STAX parser built into Java 6 is splitting that into three text nodes: > lucy > & > mary > > Yesterdays version only grabbed the first. Today's grabs all but the > second. > Tomorrows should grab all three. :-) > > The other option for you: add a woodstox jar to your classpath: > http://repo1.maven.org/maven2/org/codehaus/woodstox/wstx-asl/3.2.9/ > > The woodstox parser puts that all in a single text node. Thus, that > should > work for you. > > Dan > > >> >> Thanks agian! >> Marco >> >> marcob wrote: >> > Hi Dan, >> > >> > thank you for your detailed reply. >> > According to your first question, please find below my project >> classpath: >> > >> > activation-1.1.jar >> > ant-1.6.5.jar >> > antlr-2.7.6.jar >> > aopalliance-1.0.jar >> > apache-pdfbox-0.8.0-incubator-dev.jar >> > arq.jar >> > arq-extra.jar >> > asm.jar >> > asm-attrs.jar >> > aspectjrt-1.5.4.jar >> > backport-util-concurrent.jar >> > barbecue-1.5-beta1.jar >> > bcprov-jdk15-140.jar >> > c3p0-0.9.1.jar >> > castor-0.9.6.jar >> > cglib-2.1.3.jar >> > clibwrapper_jiio.jar >> > commons-beanutils.jar >> > commons-chain-1.1.jar >> > commons-codec-1.3.jar >> > commons-collections-2.1.1.jar >> > commons-digester.jar >> > commons-discovery.jar >> > commons-el.jar >> > commons-fileupload.jar >> > commons-validator-1.3.1.jar >> > core-3.1.1.jar >> > cxf-2.2.jar >> > dom4j-1.6.1.jar >> > ehcache-1.4.1.jar >> > ejb3-persistence.jar >> > el-ri.jar >> > FastInfoset-1.2.2.jar >> > filetimes.jar >> > FontBox-0.2.0-dev.jar >> > geronimo-activation_1.1_spec-1.0.2.jar >> > geronimo-annotation_1.0_spec-1.1.1.jar >> > geronimo-servlet_2.5_spec-1.2.jar >> > geronimo-stax-api_1.0_spec-1.0.1.jar >> > hibernate3.jar >> > hibernate-annotations.jar >> > hibernate-commons-annotations.jar >> > icefaces.jar >> > icefaces-comps.jar >> > icefaces-facelets.jar >> > icu4j_3_4.jar >> > iri.jar >> > iText-2.1.3.jar >> > jai_codec.jar >> > jai_core.jar >> > jai_imageio.jar >> > jawin.jar >> > jawin-stubs.jar >> > jaxb-impl-2.1.7.jar >> > jaxb-xjc-2.1.7.jar >> > jaxen-1.1.jar >> > jcifs-1.2.24.jar >> > jcl-over-slf4j-1.5.6.jar >> > jdom-1.0.jar >> > jena.jar >> > jenatest.jar >> > jettison-1.0.jar >> > jetty-6.1.15.jar >> > jetty-util-6.1.15.jar >> > jsf-api-1.2.jar >> > jsf-impl-1.2.jar >> > json.jar >> > jsp-2.1-glassfish-9.1.1.B51.25.p1.jar >> > jsp-2.1-jetty-6.1.15.jar >> > jsp-api-2.1-glassfish-9.1.1.B51.25.p1.jar >> > jsr107cache-1.0.jar >> > jstl.jar >> > jta.jar >> > krysalis-jCharts-1.0.0-alpha-1.jar >> > license-1.0.0.0.jar >> > license-internal-1.0.0.0.jar >> > log4j-1.2.15.jar >> > lucene-core-2.2.0.jar >> > mail-1.4.jar >> > mysql-connector-java-3.1.14-bin.jar >> > neethi-2.0.4.jar >> > opensaml-1.1.jar >> > PDFRenderer.jar >> > poi-3.2-FINAL-20081019.jar >> > poi-contrib-3.2-FINAL-20081019.jar >> > poi-scratchpad-3.2-FINAL-20081019.jar >> > postgresql-8.2-508.jdbc3.jar >> > satanet-app.jar >> > serializer-2.7.1.jar >> > servlet-api-2.5-20081211.jar >> > slf4j-api-1.5.6.jar >> > slf4j-log4j12-1.5.6.jar >> > spring.jar >> > spring-security-acl-2.0.4.jar >> > spring-security-cas-client-2.0.4.jar >> > spring-security-catalina-2.0.4.jar >> > spring-security-core-2.0.4.jar >> > spring-security-core-tiger-2.0.4.jar >> > spring-security-jboss-2.0.4.jar >> > spring-security-jetty-2.0.4.jar >> > spring-security-ntlm-2.0.4.jar >> > spring-security-openid-2.0.4.jar >> > spring-security-portlet-2.0.4.jar >> > spring-security-resin-2.0.4.jar >> > spring-security-taglibs-2.0.4.jar >> > standard-1.1.2.jar >> > stax-api-1.0.jar >> > stax-utils-20060502.jar >> > wsdl4j-1.6.2.jar >> > wss4j-1.5.7.jar >> > xalan-2.7.1.jar >> > xercesImpl.jar >> > xml-apis.jar >> > xml-resolver-1.2.jar >> > XmlSchema-1.4.2.jar >> > xmlsec-1.4.0.jar >> > xpp3_min-1.1.4c.jar >> > xstream-1.2.1.jar >> > >> > I've just checked the available snapshots for CXF 2.2 but it seems that >> > the latest was built on Tuesday 5th, so I guess it isn't the one you >> > worked on. >> > Today I'll be out of office but tomorrow (Friday 8th) I'll test your >> > changes and let you know. >> > >> > Marco >> > >> > dkulp wrote: >> >> Well, I'm not able to reproduce the issue. I've pretty much created a >> >> testcase in our aegis tests that enable wss4j with username/password >> >> combos >> >> just like you have and send "jack&jill" and it works. >> >> >> >> HOWEVER, if I send " jack&jill ", the string ended up trimmed. >> >> Digging >> >> into that more, I did discover a bug that COULD cause what you are >> >> seeing. >> >> The DOM reader (when using WSS4J, the message ends up as DOM) we have >> >> had two >> >> issues: >> >> 1) It only checked the first TEXT node. I THINK this is what you are >> >> seeing. >> >> Whatever parser you are using was splitting the text into multiple >> text >> >> nodes. >> >> Are you using something other than woodstox? >> >> >> >> 2) It was also calling trim on the resulting string. >> >> >> >> >> >> I've gone ahead and fixed those issues and am running the tests now. >> >> I'll >> >> get that committed shortly (providing the tests pass). New >> snapshots >> >> should >> >> be up tomorrow (or you could checkout from SVN and build). It would >> be >> >> great >> >> if you could test those to see if your issue is fixed as well. >> >> >> >> Dan >> >> >> >> On Wed May 6 2009 10:16:56 am marcob wrote: >> >>> Hi, >> >>> >> >>> I tested that the problem occurs if I enable WS-Security. Below the >> >>> test case. >> >>> >> >>> Service Interface: >> >>> @WebService(name = "BatchManagerService", targetNamespace = >> >>> "http://www.satanet.it/kfi") >> >>> public interface IBatchManagerService { >> >>> @WebResult(targetNamespace = "http://www.satanet.it/kfi") >> >>> public String echo(@WebParam(name="text") String txt); >> >>> } >> >>> >> >>> Service implementation: >> >>> @WebService(endpointInterface = >> >>> >> "it.satanet.karthaForInvoice.commonInterfaces.batchManager.IBatchManage >> >>>rSer vice", serviceName = "BatchManagerService", targetNamespace = >> >>> "http://www.satanet.it/kfi") >> >>> public class BatchManagerServiceImpl implements IBatchManagerService >> { >> >>> >> >>> @Override >> >>> public String echo(String txt) { >> >>> System.out.println(txt); >> >>> return txt; >> >>> } >> >>> >> >>> } >> >>> >> >>> Service Spring cfg: >> >>> <bean id="aegisDatabinding" >> >>> class="org.apache.cxf.aegis.databinding.AegisDatabinding" >> >>> scope="prototype" >> >>> /> >> >>> >> >>> <bean id="myPasswordCallback" >> >>> >> class="it.satanet.karthaForInvoice.commonInterfaces.ws_util.ServerPassw >> >>>ordC allback"/> >> >>> >> >>> <!-- WS --> >> >>> >> >>> <bean id="wsService" >> >>> >> class="it.satanet.karthaForInvoice.batchManager.service.BatchManagerSer >> >>>vice Impl" /> >> >>> <bean id="serviceFactory" >> >>> class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean" >> >>> scope="prototype"> >> >>> <property name="dataBinding" ref="aegisDatabinding" /> >> >>> </bean> >> >>> <jaxws:server id="wsServiceEndpoint" serviceBean="#wsService" >> >>> >> serviceClass="it.satanet.karthaForInvoice.batchManager.service.BatchMan >> >>>ager ServiceImpl" address="/ws"> >> >>> <jaxws:serviceFactory> >> >>> <ref bean="serviceFactory" /> >> >>> </jaxws:serviceFactory> >> >>> >> >>> <jaxws:inInterceptors> >> >>> <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor"> >> >>> <constructor-arg> >> >>> <map> >> >>> <entry key="action" value="UsernameToken"/> >> >>> <entry key="passwordType" value="PasswordText"/> >> >>> <entry key="passwordCallbackRef"> >> >>> <ref bean="myPasswordCallback"/> >> >>> </entry> >> >>> </map> >> >>> </constructor-arg> >> >>> </bean> >> >>> </jaxws:inInterceptors> >> >>> >> >>> <jaxws:properties> >> >>> <entry key="mtom-enabled" value="true" /> >> >>> </jaxws:properties> >> >>> >> >>> </jaxws:server> >> >>> >> >>> >> >>> Client (generic, but you can replace T with the service interface): >> >>> @SuppressWarnings("unchecked") >> >>> public T getClientProxy(Class<T> c) { >> >>> JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); >> >>> >> >>> // logging >> >>> // factory.getInInterceptors().add(new LoggingInInterceptor()); >> >>> // factory.getOutInterceptors().add(new LoggingOutInterceptor()); >> >>> >> >>> Map<String, Object> outProps = new HashMap<String, Object>(); >> >>> WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps); >> >>> factory.getOutInterceptors().add(wssOut); >> >>> outProps.put(WSHandlerConstants.ACTION, >> >>> WSHandlerConstants.USERNAME_TOKEN); >> >>> // Specify our username >> >>> outProps.put(WSHandlerConstants.USER, >> >>> ServerPasswordCallback.WS_SECURITY_USER); >> >>> // Password type : plain text >> >>> outProps.put(WSHandlerConstants.PASSWORD_TYPE, >> >>> WSConstants.PW_TEXT); // for hashed password use: >> >>> // properties.put(WSHandlerConstants.PASSWORD_TYPE, >> >>> WSConstants.PW_DIGEST); >> >>> outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, >> >>> ClientPasswordHandler.class.getName()); >> >>> >> >>> // invocation >> >>> factory.setServiceClass(c); >> >>> AegisDatabinding dataBinding = new AegisDatabinding(); >> >>> dataBinding.setMtomEnabled(MTOM_ENABLED); >> >>> dataBinding.setMtomUseXmime(MTOM_ENABLED); >> >>> factory.setDataBinding(dataBinding); >> >>> factory.setAddress(wsUrl); >> >>> Map<String, Object> properties = factory.getProperties(); >> >>> if (properties == null) { >> >>> properties = new HashMap<String, Object>(); >> >>> factory.setProperties(properties); >> >>> } >> >>> properties.put("mtom-enabled", MTOM_ENABLED); >> >>> >> >>> return (T) factory.create(); >> >>> } >> >>> >> >>> By disabling WSS4J support, everything works fine. >> >>> Right now, I think I can do without WSS4J but I'd like to know what >> >>> goes wrong. >> >>> Marco >> >>> >> >>> dkulp wrote: >> >>> > A simple testcase for this would be great if at all possible. >> >>> > >> >>> > I just tested this by adding the string "john&marry" to the >> >>> > testString stuff >> >>> > in our type tests and it passed fine. The full string was >> properly >> >>> > echoed >> >>> > back. Thus, I'm not sure what would be going on. A test case >> >>> >> >>> would >> >>> >> >>> > definitely be useful. >> >>> > >> >>> > >> >>> > Dan >> >>> > >> >>> > On Fri May 1 2009 3:38:44 am marcob wrote: >> >>> >> That was my first reaction as well! >> >>> >> Yes, I have CXF at both ends. I don't know if it might help, but >> in >> >>> >> >>> the >> >>> >> >>> >> previous post I forgot to say that my WS stack also includes a WS >> >>> >> Security >> >>> >> Interceptor. When I come back to the office (Monday), I'll test >> the >> >>> >> >>> same >> >>> >> >>> >> code without WS-Security and check whether exists a more updated >> >>> >> >>> version >> >>> >> >>> >> of >> >>> >> woodstox library. >> >>> >> In the meanwhile, any further suggestion is very welcome! >> >>> >> Marco >> >>> >> >> >>> >> bimargulies wrote: >> >>> >> > My first reaction is that I don't believe it. It is the woodstox >> >>> >> >>> code >> >>> >> >>> >> > that handles all of this, not us. Is the CXF on both ends? >> >>> >> > >> >>> >> > On Thu, Apr 30, 2009 at 12:21 PM, marcob <[email protected]> >> >>> >> >>> wrote: >> >>> >> >> Hi, >> >>> >> >> >> >>> >> >> I've found this unexpected behaviour while using cxf 2.2.x + >> >>> >> >> JaxWS >> >>> >> >>> + >> >>> >> >>> >> >> Aegis. >> >>> >> >> If I define a method that accepts string parameters, e.g. >> >>> >> >> >> >>> >> >> public void echo(String text) { >> >>> >> >> System.out.println(text); >> >>> >> >> } >> >>> >> >> >> >>> >> >> and I pass a string containing the ampersand character (&), >> e.g. >> >>> >> >> "john&lucy", the echo method only prints "john". I investigated >> >>> >> >>> the >> >>> >> >>> >> >> problem >> >>> >> >> with an HTTP Monitor and it seems that at client side the >> string >> >>> >> >>> is >> >>> >> >>> >> >> correctly escaped (the SOAP request contains the >> >>> >> >>> "john&amp;lucy" >> >>> >> >>> >> >> text) >> >>> >> >> but, at server side, the string is truncated at the & character >> >>> >> >> position. >> >>> >> >> >> >>> >> >> From my point of view, it seems to be a bug. >> >>> >> >> Any solution? >> >>> >> >> Thanks >> >>> >> >> Marco >> >>> >> >> -- >> >>> >> >> View this message in context: >> >>> >> >>> >> http://www.nabble.com/CXF-2.2.x-ampersand-issue-tp23319655p23319655.htm >> >>>l >> >>> >> >>> >> >> Sent from the cxf-user mailing list archive at Nabble.com. >> >>> > >> >>> > -- >> >>> > Daniel Kulp >> >>> > [email protected] >> >>> > http://www.dankulp.com/blog >> >> >> >> -- >> >> Daniel Kulp >> >> [email protected] >> >> http://www.dankulp.com/blog > > -- > Daniel Kulp > [email protected] > http://www.dankulp.com/blog > > -- View this message in context: http://www.nabble.com/CXF-2.2.x-ampersand-issue-tp23319655p23477731.html Sent from the cxf-user mailing list archive at Nabble.com.
