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
:
:
:
:
:
|