On Friday 25 February 2011 4:14:04 PM Aki Yoshida wrote: > Hi Dan, > I was creating a bug ticket some hours ago but JIRA was not responding > and could just submit it earlier > CXF-3367. > > I thought also why the PROTOCOL_HEADERS were not storing headers using > e.g., the lowercased key names. But if we change the keys now into the > lower or upper case, we will probably have to change many classes that > are expecting the current names.
What I was thinking was when the Map is created, instead of using a normal HashMap, to use something like: Map<String, ...> map = new TreeMap<String, ...>(String.CASE_INSENSITIVE_ORDER) That way, the get/put's on the map are insensitive. We would just need to make sure that where ever we CREATE the maps, we make sure we use that symantic. Dan > I was not sure if this change would then feasible in 2.3.x. We would > probably need to introduce a custom map that uses the lowercase key > name mapped to a header name value-list pair intead of the current > simple map because people expect the behavior to remain the same > (i.e.., a lookup works fine with the current constants as long as the > original headers names match the constants and for the outbound case, > the header names are serialized in the given inserted case and not > suddenly turned into lower or uppercase). > > So, I thought we would rather change SOAPActionInInterceptor so that > it looks for the soap action header by itereating through the list. > > regards, aki > > On Fri, Feb 25, 2011 at 8:52 PM, Daniel Kulp <[email protected]> wrote: > > What App server or servlet engine are you using? I've seen this type of > > thing with various servlet engines. Some of them mangle the case of the > > headers pretty bad. > > > > The "real" bug is that the PROTOCOL_HEADERS map should use a case > > insensitive key set. That's what i would log as the bug. > > > > Dan > > > > On Thursday 24 February 2011 2:42:49 PM chakras wrote: > >> I have a CXF web service running that prints out a WSDL. Taking this > >> WSDL and running it through CXF version of wsdl2java generates me the > >> stub, > >> > >> wsdl2java -verbose -p mypackage.base -sn Myservice -client %1 > >> > >> When I invoke it, I always get a SOAP fault in my interceptor. My > >> interceptor is SecurityInterceptor given below, > >> > >> read [ReadHeadersInterceptor, SecurityInterceptor, > >> SoapActionInInterceptor, StartBodyInterceptor] > >> > >> On investigating further I find that the 'SOAPAction', is passed as > >> Soapaction - so when I do this > >> (reqHeaders.get(SoapBindingConstants.SOAP_ACTION);) - I don't get any > >> Action defined. The work around for now that I could do is this, > >> > >> // Fall back on parsing headers (we get Soapaction instead of > >> SOAPAction also) > >> if (action.length() == 0) { > >> Map<String, List<String>> reqHeaders = > >> CastUtils.cast((Map)message.get(Message.PROTOCOL_HEADERS)); > >> for (Map.Entry<String, List<String>> entry : > >> reqHeaders.entrySet()) { > >> > >> String key = entry.getKey(); > >> List value = entry.getValue(); > >> if > >> (SoapBindingConstants.SOAP_ACTION.equalsIgnoreCase(key)) { > >> if (value != null && value.size() > 0) > >> action.append(value.get(0).toString()); > >> } > >> } > >> } > >> > >> Is this how it is supposed to work? > > > > -- > > Daniel Kulp > > [email protected] > > http://dankulp.com/blog > > Talend - http://www.talend.com -- Daniel Kulp [email protected] http://dankulp.com/blog Talend - http://www.talend.com
