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. 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 >
