In
addition I add my code for the Client class
:
Service service = new Service();
Service service = new Service();
Call call = (Call)
service.createCall();
call.setTargetEndpointAddress( new java.net.URL(endpoint) );
call.setProperty(call.SOAPACTION_USE_PROPERTY, new Boolean(true));
call.setProperty(call.SOAPACTION_URI_PROPERTY, "soapactionUri");
call.setOperationName( "operationName" );
call.setTargetEndpointAddress( new java.net.URL(endpoint) );
call.setProperty(call.SOAPACTION_USE_PROPERTY, new Boolean(true));
call.setProperty(call.SOAPACTION_URI_PROPERTY, "soapactionUri");
call.setOperationName( "operationName" );
// From
now on I'm guessing ...
// I assume I should provide the name of a local class
// I assume I should provide the name of a local class
QName qn =
new QName( "CustomContainer" );
// Register
the type mapping, because I receive
"<string>string</string><string>string</string>" as a
response I use the
// Array (de)serializer classes
// Array (de)serializer classes
call.registerTypeMapping(CustomContainer.class, qn, new
ArraySerializerFactory(), new ArrayDeserializerFactory() );
// set
the QName class as a return type
call.setReturnType( qn );
call.setReturnType( qn );
// Invoking
the method is no problem (invokeOneWay works), catching the result properly
however ..
Object results = call.invoke( new Object[] {} );
ArrayList test = (ArrayList) results; // casting to ArrayList is just a guess, but it works
Object results = call.invoke( new Object[] {} );
ArrayList test = (ArrayList) results; // casting to ArrayList is just a guess, but it works
for (int i =
0; i < test.size(); i++)
{
System.out.println( (String) test.get(i) );
}
The output is of the for loop is :
250ad245-6940-4b47-b474-6f2289ce15c1
e32df6d3-5999-47ce-9283-709719d7ae8a
c4a38157-706e-4ac1-a181-b90c1f9378e1
System.out.println( (String) test.get(i) );
}
The output is of the for loop is :
250ad245-6940-4b47-b474-6f2289ce15c1
e32df6d3-5999-47ce-9283-709719d7ae8a
c4a38157-706e-4ac1-a181-b90c1f9378e1
The problem is .. I don't know what QName class I should provide, it doesn't matter if
I provide an existing class (e.g. String.class) or a custom one. The output
remains the same.
And also I don't know what the return type of the invoked call is. I guessed that an ArrayList does the job, but the output isn't readable.
Again, I didn't write the services, they just gave me a URL to the WSDL.
Any help or advice at all is very much needed and appreciated :-)
And also I don't know what the return type of the invoked call is. I guessed that an ArrayList does the job, but the output isn't readable.
Again, I didn't write the services, they just gave me a URL to the WSDL.
Any help or advice at all is very much needed and appreciated :-)
-----Original Message-----
From: Quinten Verheyen
Sent: 10 February 2004 20:17
To: '[EMAIL PROTECTED]'
Subject: client calling service that returns array possible ?
From: Quinten Verheyen
Sent: 10 February 2004 20:17
To: '[EMAIL PROTECTED]'
Subject: client calling service that returns array possible ?
Hi,
I am new to Axis so if my question seems repetitive, my apologies.
I have to write a client that can call WSDL services.
Most of the services return an int, wich should pose no problem (= call.setReturnType(XMLType.XSD_INT) ).
I am new to Axis so if my question seems repetitive, my apologies.
I have to write a client that can call WSDL services.
Most of the services return an int, wich should pose no problem (= call.setReturnType(XMLType.XSD_INT) ).
However, I am
stuck when I see this :
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ResponseName xmlns="url">
<methodName>
<string>string</string>
<string>string</string>
</methodName>
</ResponseName>
</soap:Body>
</soap:Envelope>
The method name returns an array of strings (I assume) instead of a string.
I don't know what the return type is in this case.
No matter what I try, I get a (logical) error :
org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.
Expected I guess, but that doesn't give me any clue about how to solve this problem.
Sure I saw a couple of threads and mails about using custom (de)serializers etc. BUT I am only using that WDSL, I didn't develop it, so I cannot write
custom beans because they wouldn't be recognized. At least, that's how I understood it.
I sure would appreciate the help, cause this thing needs to be solved quite quickly ..
Verheyen Quinten
Software Engineer
Rue Gabrielle Petitstraat
4/6
1080 Brussel
Tel : +0032 (0)2 502 85 00
Fax : +0032 (0)2 502 76 07
Gsm : +0032 (0)494 81 04 81
Gsm : +0032 (0)494 81 04 81
E-mail : [EMAIL PROTECTED]
Politicians' Syllogism :
step 1 : we must do something.
step 2 : this is something.
step 3 : therefore we must do it.
Politicians' Syllogism :
step 1 : we must do something.
step 2 : this is something.
step 3 : therefore we must do it.
