My guess is the problem is in using the WRAPPED_STR style.  It's
convenient for getting your input string wrapped up as the desired
soap:body child element, but it causes the response to be unwrapped,
and, as a single object is returned, rather than an array, you're
losing most of the response.  If you use a straight document/literal
style/use and do your best to forbid automatic wrapping and
unwrapping,you have to do a little more work on input but you'll have
the full output.

I recall having difficulty at one time getting axis 1.4 to stop trying
to wrap and unwrap.

If you're going to be using DII for arbitrary WSDLs, you probably
would not be able to use wrapping and unwrapping anyway -- not all
doc/lit services can have their responses unwrapped.  You should just
work with the full documents required for input and output.

Jeff



On 10/30/07, Ernesto Pin <[EMAIL PROTECTED]> wrote:
> Hi!. I'm trying to develop a "pure" dynamic client to invoke WS's. The idea
> behind this, is that I can't generate any classes to invoke the
> web-services. Particularly, I can't use specific classes for return types. I
> thought about using org.w3c.dom.Document as return type, but I'm not being
> successful. The problem I'have, is that, when I return from service's
> invocation, the resultant document only contains the first node of the
> response.
>
> I would be very grateful if someone could help me to obtain the whole
> document.
>
> Here is my stuff. As you will see, the "conversation" with the service is
> well-made, so I think that my problem is when the result is read. I don't
> know how to read response by myself, or how, where and what configure to
> read it well.
>
> -------------------------------------------------------------------------------------
> wsdl: http://www.webservicex.net/geoipservice.asmx?wsdl
> -------------------------------------------------------------------------------------
> Client code (running inside a servlet hosted in jBoss 4.2.1)
>
> package concrete;
>
> import java.io.IOException;
> import java.io.PrintWriter;
> import java.net.MalformedURLException;
> import java.net.URL;
>
> import javax.servlet.http.HttpServletRequest;
> import javax.servlet.http.HttpServletResponse;
> import javax.xml.namespace.QName;
> import javax.xml.rpc.ServiceException;
>
> import org.apache.axis.client.Call ;
> import org.apache.axis.client.Service;
> import org.apache.axis.client.ServiceFactory;
> import org.apache.axis.constants.Style;
> import org.apache.axis.constants.Use;
> import
> org.apache.axis.encoding.ser.DocumentDeserializerFactory ;
> import
> org.apache.axis.encoding.ser.DocumentSerializerFactory;
> import org.apache.axis.soap.SOAPConstants;
> import org.w3c.dom.Document;
> import org.w3c.dom.Node;
> import org.w3c.dom.NodeList;
>
> import actions.IAction ;
>
> public class TestParams implements IAction {
>
>     @Override
>     public void execute(HttpServletRequest req, HttpServletResponse resp) {
>         try {
>             QName name = new QName(" http://www.webservicex.net";,
> "GeoIPService");
>
>             Service service = (Service) ServiceFactory
>                     .newInstance()
>                     .createService(
>                             new URL(
>
> "http://webservicex.net/geoipservice.asmx?wsdl";),
>                             name);
>
>             QName port = new QName( name.getNamespaceURI(),
> "GeoIPServiceSoap");
>             QName oper = new QName(name.getNamespaceURI(), "GetGeoIP");
>
>             Call call = (Call) service.createCall(port, oper);
>
>
> call.setTargetEndpointAddress("http://webservicex.net/geoipservice.asmx";);
>
>             call.setEncodingStyle(null);
>             call.setProperty(Call.SOAPACTION_USE_PROPERTY , new
> Boolean(true));
>             call.setProperty(Call.SOAPACTION_URI_PROPERTY,
>                     "http://www.webservicex.net/GetGeoIP";);
>             call.setSOAPVersion(SOAPConstants.SOAP11_CONSTANTS);
>             call.setOperationUse(Use.LITERAL);
>             call.setOperationStyle(Style.WRAPPED_STR);
>
>
> call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR
> ,
>                     Boolean.FALSE);
>
> call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS,
>                     Boolean.FALSE);
>
>             call.setReturnType(new QName(name.getNamespaceURI (), "GeoIP"));
>             call.setReturnClass(Document.class);
>
>             call.registerTypeMapping(Document.class,
>                     new QName(name.getNamespaceURI(), "GeoIP"),
>                     DocumentSerializerFactory.class,
>                     DocumentDeserializerFactory.class,
>                     false
>                     );
>
>
>             setRequestHeaders(call);
>             setAttachments(call);
>
>             Object[] params = new Object[] { "203.244.123.15" };
>
>             Document doc;
>
>             doc = (Document) call.invoke(params);
>
>             printDocument(doc, resp.getWriter());
>
>         } catch (MalformedURLException e) {
>             e.printStackTrace();
>         } catch (ServiceException e) {
>             e.printStackTrace();
>         } catch (IOException e) {
>             e.printStackTrace();
>         } catch (Exception e) {
>             e.printStackTrace();
>         }
>     }
>
>     private void printDocument(Document ret, PrintWriter writer) {
>         NodeList childNodes = ret.getChildNodes();
>
>         for (int i = 0; i < childNodes.getLength(); i++) {
>             printNode(0, childNodes.item(i), writer);
>         }
>     }
>
>     private void printNode(int level, Node node, PrintWriter writer) {
>         String pre = "";
>
>         for (int i = 0; i < level; i++) {
>             pre += "\t";
>         }
>
>         String strNode = String.format("%s%s = %s", pre, node.getNodeName
> (),
>                 node.getNodeValue());
>
>         writer.println(strNode);
>
>         NodeList childNodes = node.getChildNodes();
>
>         for (int i = 0; i < childNodes.getLength(); i++) {
>             printNode(level++, childNodes.item(i), writer);
>         }
>
>     }
>
> }
> -------------------------------------------------------------------------------------
> SOAP request being posted (body tabbed for readability)
>
> POST http://webservicex.net:80/geoipservice.asmx HTTP/1.0
> Content-Type: text/xml; charset=utf-8
> Accept: application/soap+xml, application/dime, multipart/related, text/*
> User-Agent: Axis/1.4
> Host: webservicex.net
> Cache-Control: no-cache
> Pragma: no-cache
> SOAPAction: "http://www.webservicex.net/GetGeoIP "
> Content-length: 354
>
> <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/ "
> xmlns:xsd="http://www.w3.org/2001/XMLSchema";
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance ">
> <soapenv:Body>
> <GetGeoIP xmlns="http://www.webservicex.net";>
> <IPAddress> 203.244.123.15</IPAddress>
> </GetGeoIP>
> </soapenv:Body>
> </soapenv:Envelope>
> --------------------------------------------------------------------------------------
> SOAP response received (body tabbed for readability)
>
> HTTP/1.0 200 OK
> Date: Tue, 30 Oct 2007 20:05:44 GMT
> Server: Microsoft-IIS/6.0
> X-Powered-By: ASP.NET
> X-AspNet-Version: 1.1.4322
> Cache-Control: private, max-age=0
> Content-Type: text/xml; charset=utf-8
> Content-length: 524
> X-Cache: MISS from httpproxy
> Via: 1.0 httpproxy:3128 (squid)
> Proxy-Connection: close
>
> <?xml version=" 1.0" encoding="utf-8"?>
> <soap:Envelope
> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";
> xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance";
> xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
> <soap:Body>
> <GetGeoIPResponse xmlns=" http://www.webservicex.net";>
> <GetGeoIPResult>
> <ReturnCode>1</ReturnCode>
> <IP> 203.244.123.15</IP>
> <ReturnCodeDetails>Record Found</ReturnCodeDetails>
> <CountryName>KOREA REPUBLIC OF</CountryName>
> <CountryCode>KR</CountryCode>
> </GetGeoIPResult>
> </GetGeoIPResponse>
> </soap:Body>
> </soap:Envelope>
> ---------------------------------------------------------
> What printDocument() method shows:
> ns1:ReturnCode = null
> #text = 1
>
>
> ---------------------------------------------------------
>
> Thanks,
>             Ernesto Pin

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to