Ok, the bug is submitted with the problematic WSDL attached. CXF-993. Back to staring at my SSL problem and hoping it will somehow fix itself.
On 9/11/07, James Mao <[EMAIL PROTECTED]> wrote: > > Great, That's definitely helpful. > > Thanks Ryan, > > James > > > > Sure, I'll see if I can somehow get my test case working that fails, > though > > maybe it doesn't fail and the bug with the interceptor that I mentioned > > earlier is causing it to fail no matter how I run wsdl2java. I'll see > if I > > can finish getting a small test case. > > > > > > On 9/11/07, James Mao <[EMAIL PROTECTED]> wrote: > > > >> Hi Ryan, > >> > >> > >>> I was able to get this to work now with my scaled down test wsdl, but > >>> > >> not > >> > >>> the full wsdl that I need it to work with, I'll do my best to help you > >>> > >> with > >> > >>> what I know about this. > >>> > >>> I did notice your thread that sounded familiar. Apparently if you add > >>> > >> the > >> > >>> -exsh true parameter to wsdl2java, you'll end up with an extra > parameter > >>> > >> in > >> > >>> your method signature of your port class implementation. This extra > >>> parameter is the header specified in your wsdl. If you don't add the > >>> > >> exsh, > >> > >>> you won't get the parameter and end up with an IndexOutOfBounds error > >>> because cxf is expecting the header. I'm not sure why cxf would > assume > >>> > >> you > >> > >>> are including the header if you never generated your classes to accept > >>> > >> one. > >> > >> If exsh not turned on, then there'll not generate the extra header > >> parameter, and it should not fail the runtime, > >> otherwise there's a bug in the runtime. the header parameter is > optional, > >> > >> I remember that i fixed this in both the tools and runtime, > >> but maybe there's one case that i didn't cover, so, do you mind send > >> your case (simplified) which i can reproduce, > >> If you can file a jira, that will be great. > >> > >> Regards, > >> James > >> > >> > >> > >> > >>> I know my classes weren't setting the header because when I did a find > >>> usages on my AuthCredentials class, which is put in the header, it > >>> > >> wasn't > >> > >>> used anywhere. Actually the generated client code, didn't even > actually > >>> make calls to invoke the webservice. It would just create a response > >>> > >> object > >> > >>> set to null and return it, and that was it. So the generated client > in > >>> > >> my > >> > >>> opinion was useless anyhow. > >>> > >>> On 9/11/07, Gamble, Wesley (WG10) <[EMAIL PROTECTED]> wrote: > >>> > >>> > >>>> Ryan, > >>>> > >>>> "All I > >>>> get currently is an IndexOutOfBoundsException when CXF tries to > create > >>>> the > >>>> header of the SOAP message to send," > >>>> > >>>> sounds suspiciously like my problem (thread: "Can't get at SOAP error > >>>> from Web service..."). I'm getting an index out of bounds exception > as > >>>> well on the header processing. > >>>> > >>>> What is the -exsh flag on wsdl2java supposed to do for you? What > does > >>>> "Enables or disables processing of extended soap header message > >>>> binding." mean? How would I know the difference between a regular > and > >>>> an extended soap header message? > >>>> > >>>> How do you know that "the generated client classes do NOT set the > >>>> > >> header > >> > >>>> that is specified in the binding"? > >>>> > >>>> Wes > >>>> > >>>> -----Original Message----- > >>>> From: Ryan Moquin [mailto:[EMAIL PROTECTED] > >>>> Sent: Tuesday, September 11, 2007 9:36 AM > >>>> To: [email protected] > >>>> Subject: Adding headers to soap request > >>>> > >>>> I'm writing this as a new message, but I'm hoping that it's answer > will > >>>> solve my other issue I'm writing about. I think I'm having having > >>>> trouble > >>>> understanding how to add a header to my request using cxf. In short, > I > >>>> have > >>>> a WSDL that defines this element: > >>>> > >>>> <s:element name="AuthCredentials" type="tns:AuthCredentials"/> > >>>> <s:complexType name="AuthCredentials"> > >>>> <s:sequence> > >>>> <s:element minOccurs="0" maxOccurs="1" name="username" > >>>> type="s:string"/> > >>>> <s:element minOccurs="0" maxOccurs="1" name="password" > >>>> type="s:string"/> > >>>> </s:sequence> > >>>> </s:complexType> > >>>> > >>>> and then defines a binding that uses it: > >>>> > >>>> <wsdl:operation name="sendNotification"> > >>>> <soap:operation > >>>> soapAction="urn://testnotification/sendNotification" > >>>> style="document"/> > >>>> <wsdl:input> > >>>> <soap:body use="literal"/> > >>>> <soap:header message="tns:sendNotificationAuthCredentials" > >>>> part="AuthCredentials" use="literal"/> > >>>> </wsdl:input> > >>>> <wsdl:output> > >>>> <soap:body use="literal"/> > >>>> </wsdl:output> > >>>> </wsdl:operation> > >>>> > >>>> When I run this WSDL through wsdltojava using -exsh true, the > generated > >>>> client classes do NOT set the header that is specified in the > binding, > >>>> which > >>>> is what I thought that the -exsh is supposed to do for you. So > >>>> basically, > >>>> I'm trying to figure out how I would add this element to my request. > >>>> Here > >>>> is what WSDL to java generated, how do I add the AuthCredentials > >>>> > >> element > >> > >>>> to > >>>> the messagingPort class so that my request will go through with it? > All > >>>> I > >>>> get currently is an IndexOutOfBoundsException when CXF tries to > create > >>>> the > >>>> header of the SOAP message to send, I'm guessing because I don't know > >>>> how to > >>>> add the header. I looked at the CXF examples on it, but it doesn't > >>>> > >> look > >> > >>>> like the headers are being added as a header: > >>>> > >>>> public void sendNotification() { > >>>> NotificationService messagingService = null; > >>>> NotificationServicePort messagingPort = null; > >>>> > >>>> messagingService = new NotificationService(wsdl, SERVICE_NAME); > >>>> messagingPort = messagingService.getNotificationServicePort(); > >>>> > >>>> System.out.println("Invoking sendNotification..."); > >>>> java.lang.String _sendNotification_parametersVal = ""; > >>>> javax.xml.ws.Holder<java.lang.String> > _sendNotification_parameters > >>>> > >> = > >> > >>>> new > >>>> javax.xml.ws.Holder<java.lang.String > >(_sendNotification_parametersVal); > >>>> messagingPort.sendNotification(_sendNotification_parameters); > >>>> System.out.println > ("sendNotification._sendNotification_parameters=" > >>>> + > >>>> _sendNotification_parameters.value); > >>>> } > >>>> > >>>> > >>>> > >>> > > > > >
