El jue, 14-12-2006 a las 23:45 +0200, Schalk Neethling escribió:
> Greetings Javier,
> 
> If you could send me the skeleton code that would be very helpful. Thanks!

SOAP over HTTP. Feel free to add this to the project's documentation if
you find it useful. It's based on code found inside ServiceClient.
Alternatively, one could modify ServiceClient to allow a whole envelope
to be passed, but I honestly don't know if that would break some design
principle.

Options options = new Options();
options.setTo(new EndpointReference(..)); // TODO Insert the endpoint
address here.
                options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
options.setAction(..); // TODO Fill your SOAPAction here
options.setExceptionToBeThrownOnSOAPFault(true);

try{
        ServiceClient serviceClient = new ServiceClient();
        serviceClient.setOptions(options);
        // TODO Add headers here.
        serviceClient.addHeader(...);

        OperationClient opClient =
serviceClient.createClient(ServiceClient.ANON_OUT_IN_OP);
        MessageContext mc = new MessageContext();

mc.setServiceContext(opClient.getOperationContext().getServiceContext());

        SOAPFactory soapFactory = getSOAPFactory();
        SOAPEnvelope envelope = soapFactory.getDefaultEnvelope();
        SOAPBody body = envelope.getBody();
        // TODO Add the body's children here
        body.addChild(..);

        serviceClient.addHeadersToEnvelope(envelope);
        mc.setEnvelope(envelope);
        opClient.addMessageContext(mc);
//      opClient.setCallback(new Callback() {
//              @Override
//              public void onComplete(AsyncResult result) {
//                      System.out.println(result);
//              }
//
//              @Override
//              public void onError(Exception e) {
//                      userCallback.failed(e);
//              }
//      });
//      opClient.execute(false); // Async. invocation
        opClient.execute(true); // Blocking invocation
        MessageContext response =
opClient.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
} catch (AxisFault f) {
        // TODO handle faults here
}

> Javier Kohen wrote:
> > El jue, 14-12-2006 a las 23:09 +0200, Schalk Neethling escribió:
> >   
> >> Hi there everyone,
> >>
> >> My apologies beforehand for the large amount of code etc. I am new to 
> >> Axis2 and I am currently implementing a web service. All is going well 
> >> except when executing the code below I get the following error:
> >>
> >> INFO  - [org.apache.commons.httpclient.HttpMethodDirector] - I/O 
> >> exception (org.apache.axis2.AxisFault) caught when processing request: 
> >> Can not output XML declaration, after other output has already been 
> >> done.; nested exception is:
> >>     javax.xml.stream.XMLStreamException: Can not output XML declaration, 
> >> after other output has already been done.
> >>     
> >
> > I've seen this just yesterday myself.
> >
> >   
> >>             SOAPBody body = factory.createSOAPBody(envelope);
> >>             OMElement send = factory.createOMElement("Send", ns);
> >>     
> > [ Lots of code removed. ]
> >   
> >>             body.addChild(send);
> >>             ServiceClient sender = new ServiceClient();
> >>             sender.setOptions(options);
> >>             OMElement result = sender.sendReceive(envelope);
> >>     
> >
> > The solution is to pass sendReceive the send element directly; don't
> > pass it the envelope and body elements. SendReceive ends up
> > unconditionally wrapping the supplied OMElement within a body element.
> > Note that you can still set headers this way, by means of the
> > ServiceClient instance.
> >
> > In my case, I needed to add two elements to the body, so I had to create
> > the whole envelope and use the OperationClient interface instead to run
> > the operation. I can give you skeleton code to do that, in case you need
> > it, it's only slightly more complex than the above.
> >
> > Greetings,
> >   
> 
-- 
Javier Kohen <[EMAIL PROTECTED]>
ICQ: blashyrkh #2361802
Jabber: [EMAIL PROTECTED]

Attachment: signature.asc
Description: Esta parte del mensaje está firmada digitalmente

Reply via email to