Axis “wrapped” style is not just “equivalent” to document/literal. It *is* document/literal. When using Axis “document” style, you still need an enclosing tag – it just doesn’t need to be the same as the operation name. But per the WS-I Basic Profile, a document/literal message must contain at most one child element in the SOAP Body.

 

.NET uses the equivalent of the Axis wrapped style by default. Therefore wrapped style offers the best compatibility.

 

- Anne

 


From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Sent: Thursday, July 15, 2004 10:39 AM
To: [EMAIL PROTECTED]
Subject: Re: Returning an Array over Axis

 

Can I get away with wrapped/literal for .net compatibilty?

 

In a message dated 7/15/2004 10:28:41 AM Eastern Standard Time, [EMAIL PROTECTED] writes:

James,

I noticed the SOAP response I pasted below when I used an
interactive tool to send/receive SOAP messages. That tool
is good for testing, not production. For production, I
switched to wrapped/literal, and clients targetting that
get back an array just fine.

wrapped/literal is supposed to be equivalent to document/literal
(except, of course, for an additional enclosing tag). Would
it be possible for you to change your server to wrapped/literal?

Anand

On Thu, 15 Jul 2004 [EMAIL PROTECTED] wrote:

: Thank you for your responses,
:
: I was wondering if you could tell me exactly what you did to get it ot  work.
: Currently an array is is the needed type in my java (yes I  use Doc/Lit),
: however the error occurs anyway.
:
: Please help,
: James
:
: In a message dated 7/14/2004 7:00:42 PM Eastern Standard Time,
: [EMAIL PROTECTED] writes:
:
: James,
:
: I'll back off from my claim that there's a  problem.
: When I write a class/interface that has a method
: that returns a  string array, the WSDL seems to indicate
: that the return is a single  xsd:string. Even the
: stubs generated from the WSDL show a return of  String.
: However, when I actually invoke the method, I do get
: back the  array, just in different  namespaces:
:
: ...
: <soapenv:Body>
: <echoArrReturn  xmlns="urn:EchoDocLit">vlad</echoArrReturn>
: <ns1:echoArrReturn  xmlns:ns1="urn:EchoDocLit">is</ns1:echoArrReturn>
: <ns2:echoArrReturn  xmlns:ns2="urn:EchoDocLit">sanguine</ns2:echoArrReturn>
: </soapenv:Body>
: ...
:
: Perhaps  that's what the spec for doc/lit indicates, but
: it seems unintuitive to  me.
:
: I'm moving over to wrapped/literal after this  experience;
: perhaps you could do the same.
:
: Anand
:
: On Wed, 14  Jul 2004, Anand Natrajan wrote:
:
: : Is your web service exposed as a  document/literal?
: : If yes, I face a similar problem - Axis 1.2 beta
: :  (June 14th release) makes the return type of the
: : method a String, instead  of String[]. The problem
: : is right where I do java2wsdl - even the WSDL,  I
: : think, is incorrrect. The problem does not occur
: : with rpc/encoded,  rpc/literal or wrapped/literal.
: :
: : I mailed a post about this a week or  so ago but got
: : no response. I'm compiling a test case along with
: : the  WSDL and sample clients to illustrate the issue.
: : Next post...
: :
: :  Anand
: :
: : On Wed, 14 Jul 2004 [EMAIL PROTECTED] wrote:
: :
: : :
: : : I  have a very nice Axis Web Service running in which I call a "query"
: : :  function which returns an arbitrarily sized array of type String[].
: :  :
: : : I call the axis implementation file with the following call (Assume  all
: : : setup of service is correct):
: : :
: : : java.lang.String[]  yes_list =
: (java.lang.String[])handler.query(groupName,
: : : password,  accountName, conditions);
: : :
: : : handler.query is the function which  returns the String[]. Regardless,
: this
: : : function, while actually  successfully running through Axis, brings about
: the
: : : following exception  on the local machine:
: : :
: : : java.lang.ClassCastException
: : :  java.lang.ClassCastException
: : : at $Proxy0.query(Unknown Source)
: : :  at
: : :
: _2._0._0._127.axis.services.adminHandlerServicePort.adminHandlerClient2.main(adminHandler
: :  : Client2.java:77)
: : :
: : : I have checked the mailing list for possible  causes but to know avail.
: Would
: : : somebody be kind enough to offer  some advice as to how I could stop this
: : : message from coming up?
: :  :
: : : Below is my client program:
: : : package  placeholder.axis.services.clientHandlerServicePort;
: : :
: : : public class  clientHandlerClient2
: : : {
: : : static String  url   =
: : :  "_http://placeholder/axis/services/clientHandlerServicePort_
: (http://placeholder/axis/services/clientHandlerServicePort) ";
: : : static  String router  = "_http://placeholder/axis/clientDirect_
: : :  (http://placeholder/axis/clientDirect) ";
: : :
: : :      static String service =  "clientDirectService.wsdl";
: : :
: : :
: : :  public static void main(String[]  args)
: : : {
: : : try
: : : {
: :  : System.err.println("This Client tests getReport");
: : :
: : :   ServiceFactory sf =  ServiceFactory.newInstance();
: : :  URL u = new URL(router + "/" +  service);
: : : QName  serviceName  = new  QName(url,"clientHandlerService");
: : : Service s =  sf.createService(u,serviceName);
: : :
: : :         QName portName  = new  QName(url,"clientHandlerServicePort");
: : :
: : :       List  handlerChain =
: : :  s.getHandlerRegistry().getHandlerChain(portName);
: : : HandlerInfo hi =  new  HandlerInfo(LoggingHandler.class,null,null);
: : :  handlerChain.add(hi);
: : :
: : :             //Checking for  proper syntax of  call
: : : if   (args.length!=3)
: : : {
: : : System.err.println("Incorrect  usage of  Client. Please use the
: following:");
: : :  System.err.println("clientHandlerClient" + " [Account Name]" +  "
: : :  [Password]" + "    [Conditions]");
: : : }
: : : else
: : :  {
: : : System.out.println("Thank You. Processing. . .");
: : :  ClientHandler  handler = (ClientHandler) s.getPort(portName,
: : :  ClientHandler.class);
: : :
: : :   String accountName    =  args[0];
: : : String password    =  args[1];
: : :  String conditions = args[2];
: : :
: : : if(s == null)
: : :  System.out.println("Service Not Working Properly");
: : :
: : :    String[] queryList = handler.query(accountName, password,
: conditions);
: : :
: : :   System.out.println("Testing in  csv  format");
: : : String format = "csv";
: : :
: : :    String[] rawQueryList = handler.getQuery(accountName, password,
: queryList,
: : : format);
: : :
: : :    System.out.println("Finished.");
: : : }
: : : }
: : :  catch(Exception  e)
: : : {
: : : System.err.println("Error  running  Client:");
: : : System.err.println(e);
: : :  e.printStackTrace();
: : : }
: : : }
: : : }
: : :
: : : I would  appreciate any comments on this manner. I have checked the
: : : axis-mailing  list for previous solutions however have found none have
: been  helpful  for
: : : me to diagnose.
: : :
: : : Sincere Thanks,
: : : James  Crosson
:
:
:
:
:

 

Reply via email to