You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by Sebastian Puhl <se...@cismet.de> on 2008/10/01 17:08:33 UTC

ContextMessage accces via SOAP Client ok, but ClientStub access leads to error

Hello List,

I've got a problem with Axis2/XmlBeans/WSDL2Java. The build up is as follow:

I use WSDL2Java to generate the Java classes. This works pretty good. My
WSDL file looks like this:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version
is JAX-WS RI 2.1.4-b01-. -->
<definitions targetNamespace="http://test.bug.axis2/"
    name="Axis2BugTestWSService"
    xmlns:tns="http://test.bug.axis2/"
    xmlns:samla="urn:oasis:names:tc:SAML:2.0:assertion"
    xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns="http://schemas.xmlsoap.org/wsdl/">
  <types>
    <xsd:schema>
      <xsd:import namespace="urn:oasis:names:tc:SAML:2.0:assertion"
schemaLocation="saml-schema-assertion-2.0.xsd"/>
      <xsd:import namespace="urn:oasis:names:tc:SAML:2.0:protocol"
schemaLocation="saml-schema-protocol-2.0.xsd"/>
    </xsd:schema>
  </types>
  <message name="buh">
    <part name="parameters" element="samlp:AuthnRequest"/>
  </message>
  <message name="buhResponse">
    <part name="parameters" element="samla:Assertion"/>
  </message>
  <portType name="Axis2BugTestWS">
    <operation name="buh">
      <input message="tns:buh"/>
      <output message="tns:buhResponse"/>
    </operation>
  </portType>
  <binding name="Axis2BugTestWSPortBinding" type="tns:Axis2BugTestWS">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="document"/>
    <operation name="buh">
      <soap:operation soapAction=""/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
    </operation>
  </binding>
  <service name="Axis2BugTestWSService">
    <port name="Axis2BugTestWSPort" binding="tns:Axis2BugTestWSPortBinding">
      <soap:address
location="http://localhost:8080/axis2/services/Axis2BugTestWSService"/>
    </port>
  </service>
</definitions>

I also generate the clientstubs. The operation buh is implemented as follow:

public class BuhService extends Axis2BugTestWSServiceSkeleton
{
    private static final transient Logger LOG = Logger.getLogger(BuhService.
            class);

    @Override
    public AssertionDocument buh(AuthnRequestDocument authnRequest)
    {
        LOG.info("in buh");
        try
        {
            LOG.fatal("envelope: " + MessageContext.
                    getCurrentMessageContext().getEnvelope());
        }catch(final Exception e)
        {
            LOG.fatal("aargh", e);
        }
        final AssertionDocument ad =
AssertionDocument.Factory.newInstance();
        ad.addNewAssertion();
        return ad;
    }

}

So everything is pretty straight forward and there is nothing special.
When I deploy the service to the Axis container everything works fine.
And even when I access the web service over a generic SOAP client (SOAP
UI) with the following request:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
    <AuthnRequest xmlns="urn:oasis:names:tc:SAML:2.0:protocol">
      <Subject xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
        <NameID>testuser4</NameID>
        <SubjectConfirmation>
          <SubjectConfirmationData>password4</SubjectConfirmationData>
        </SubjectConfirmation>
      </Subject>
    </AuthnRequest>
  </soapenv:Body>
</soapenv:Envelope>

the service acts as desired. I see the envelope of the message context
in my logging without the body (because the stream is consumed by
xmlbeans for creating the input objects ?!). The problem now is when I
try to use the clientstub with exactly the same request (checked via tcp
monitor) and the following Java code:

public static void main(final String[] args)
    {
        LOG.info("running");
        try
        {
            final Axis2BugTestWSServiceStub s = new
Axis2BugTestWSServiceStub(

"http://localhost:8080/axis2/services/Axis2BugTestWSService");
            final AuthnRequestDocument ard = AuthnRequestDocument.Factory.
                newInstance();
            final AuthnRequestType request = ard.addNewAuthnRequest();

request.addNewSubject().addNewNameID().setStringValue("testuser4");
            request.getSubject().addNewSubjectConfirmation().
                    addNewSubjectConfirmationData().set(XmlString.Factory.
                    newValue("password4"));
            LOG.info("request: " + ard);
            System.out.println(s.buh(ard));
        }catch(final Exception e)
        {
            LOG.fatal("crashed: " + e);
        }
    }

I can't access the envelope in the messageContext or any of its child
objects in the service implementation you saw earlier. Every try results
in the following Exception:

org.apache.axiom.om.OMException: java.util.NoSuchElementException
    at
org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:249)
    at
org.apache.axiom.om.impl.llom.OMElementImpl.buildNext(OMElementImpl.java:633)
    at
org.apache.axiom.om.impl.llom.OMElementImpl.getFirstOMChild(OMElementImpl.java:650)
    at
org.apache.axiom.om.impl.llom.OMElementImpl.getChildren(OMElementImpl.java:323)
    at
org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:903)
    at
org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:889)
    at
org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:905)
    at
org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:889)
    at
org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:905)
    at
org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:889)
    at
org.apache.axiom.om.impl.llom.OMNodeImpl.serialize(OMNodeImpl.java:375)
    at
org.apache.axiom.om.impl.llom.OMElementImpl.toString(OMElementImpl.java:1051)
    at java.lang.String.valueOf(String.java:2827)
    at java.lang.StringBuilder.append(StringBuilder.java:115)
    at bug.BuhService.buh(BuhService.java:33)
    at
axis2.bug.test.Axis2BugTestWSServiceMessageReceiverInOut.invokeBusinessLogic(Axis2BugTestWSServiceMessageReceiverInOut.java:48)
    at
org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver.invokeBusinessLogic(AbstractInOutSyncMessageReceiver.java:42)
    at
org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:100)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:176)
    at
org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275)
    at
org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:133)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)
Caused by: java.util.NoSuchElementException
    at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1083)
    at
org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:506)
    at
org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:161)
    ... 34 more

My Environment is:
*Axis2* 1.4.1
Tomcat6
WSDL 1.1
XMLBeans 2.2.0
Ubuntu 8.04 <http://2.2.0.>

Maybe I'm doing something wrong or using something in a
strange/inappropriate way. I hope my example was simple and
understandable. I would highly appreciate every reply to solve this
problem. Maybe somebody can give me a little background  to understand
this behaviour or appropriated links to resources.

Thanks a lot in advance

Cheers

Sebastian


---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org