[SoapRMI] writing a (de)serializer

Aleksander Slominski aslom_at_cs.indiana.edu
Sat, 30 Nov 2002 13:23:03 -0500


This is a multi-part message in MIME format.
--------------547855B8992D709887231300
Content-Type: text/plain; charset=iso-8859-2
Content-Transfer-Encoding: 7bit

"nodep_at_libero.it" wrote:

> I send you the code. Basically I've modified
> the "minimal" sample. I placed Mex.java, MexHandler.java,
> SoapEnc.java in: src\java\soaprmi\soap\soaprmi\soapenc
> and I used command "build all" to rebuild xsoap.

> Question: where should I to call "SoapEnc" for to enable
> my serializer?

best to put in your application code but keeping it in SoapEnc is
also fine if _all_ applications will need this particular type
(see HelloServer.addMexMapping() function i have added).

the missing piece was use of mapping to tell xsoap internals that
Mex.class is associated with some namespace uri, local name pair.

i am attaching modified sample code that works.

let me know if it works for you.

thanks,

alek

ps. here is output from hello server when run with full debugging:

Logger $Revision: 1.10 $ $Date: 2002/11/07 23:32:15 $ (GMT) configured as ':ALL'
[ main: XmlJavaMapping.java:42 setDefaultPortTypeNsPrefix ] called. value = urn:soaprmi-v11:temp-jav
a-port-type
[ main: XmlJavaMapping.java:47 setDefaultArrayComponentInterfaceNsPrefix ] ENTRY urn:soaprmi-v11:tem
p-java-array-component-interface-type
Server attempting to bind to socket TCP port 8090
Server trying to bind to port 8090
[ main: HttpSocketSoapInvoker.java:52 <clinit> ] property xsoap.rpc.invoke.timeout.ms is not specifi
ed
[ main: HttpSocketSoapServer.java:83 startServer ] starts listening on 8090 :-)
[ main: SoapServices.java:119 addDefaultDispatcher ] default embedded web server started on port 809
0
[ listen8090: HttpSocketSoapServer.java:125 run ] ENTRY
[ main: PlainServerSocketFactory.java:93 getMyIp ] no xsoap.host.ip property
[ main: SoapDispatcherImpl.java:89 createEndpoint ] added for loc=http://192.168.1.100:8090/stefano-
service skeleton=soaprmi.soaprpc.SoapDynamicSkeleton_at_6672d6 disptr=soaprmi.soaprpc.HttpSocketSoapDis
patcher_at_fd54d6
Server is available at $Proxy0_at_ec587733 to Port[name=stefano-service,portType=PortType[uri=urn:soapr
mi-v11:temp-java-port-type,name=stefano.HelloService],endpoint=Endpoint[location=http://192.168.1.10
0:8090/stefano-service,binding=soaprmi.port.Binding_at_786e64,cookie=null]] and
StartP ref1=http://192.168.1.100:8090/stefano-service
Server waiting for conections...
[ listen8090: HttpSocketSoapServer.java:135 run ] received connection socket=Socket[addr=/127.0.0.1,
port=2747,localport=8090]
[ connection1on8090: HttpSocketSoapServerConnection.java:73 run ] cctx=soaprmi.server.Services$Conne
ctionContextImpl_at_cf40f5 socket=Socket[addr=/127.0.0.1,port=2747,localport=8090] connectionProps={}
[ connection1on8090: HttpSocketSoapServerConnection.java:101 process ] ENTRY
[ connection1on8090: HttpSocketSoapServerConnection.java:104 process ] waiting for next request
[ connection1on8090: HttpSocketSoapServerConnection.java:107 process ] TRACE waiting for first line
of HTTP request
[ connection1on8090: HttpSocketSoapServerConnection.java:124 process ] TRACE receiving first line wi
th request:---
POST /stefano-service HTTP/1.0---
Host: localhost
User-Agent: SoapRMI/1.2
Content-Type: text/xml; charset=utf-8
Content-Length: 478
SOAPAction: ""
Connection: Close

[ connection1on8090: Util.java:185 getContentTypeCharset ] ndx=10 from contentType=text/xml; charset
=utf-8
[ connection1on8090: HttpSocketSoapServerConnection.java:183 process ] got charset=utf-8 from conten
tType=text/xml; charset=utf-8
[ connection1on8090: HttpSocketSoapServerConnection.java:219 process ]  received request:---
<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:SOAP-ENC='http:/
/schemas.xmlsoap.org/soap/encoding/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd
='http://www.w3.org/2001/XMLSchema' SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding
/'>
<SOAP-ENV:Body>
<m:sayHello xmlns:m='urn:hello:sample'>
<sayHello xsi:type='ns1:mex' xmlns:ns1='urn:stefano'>A</sayHello>
</m:sayHello>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
---

[ connection1on8090: HttpSocketSoapServerConnection.java:240 process ] dispatching method 'POST'
[ connection1on8090: MethodDispatcher.java:160 dispatch ] TRACE invoking method sayHello on target c
lass stefano.HelloServiceImpl
[ connection1on8090: MethodDispatcher.java:164 dispatch ] TRACE params[0]=stefano.Mex_at_c6f579 stefano
.Mex
class stefano.HelloServiceImpl executing sayHello method with argument stefano.Mex_at_c6f579
[ connection1on8090: MethodDispatcher.java:175 dispatch ] TRACE sayHello result='Hello from Padova!'

[ connection1on8090: MethodDispatcher.java:296 sendResponse ] TRACE sending response result='Hello f
rom Padova!'
[ connection1on8090: HttpSocketSoapServerConnection.java:275 process ] TRACE: sending response:---
HTTP/1.0 200 OK
Date: 30 Nov 2002 18:18:27 GMT
Server: SoapRMI/1.2
Content-Type: text/xml; charset="utf-8"
Content-Length: 486

<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:SOAP-ENC='http:/
/schemas.xmlsoap.org/soap/encoding/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd
='http://www.w3.org/2001/XMLSchema' SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding
/'>
<SOAP-ENV:Body>
<m:sayHelloResponse xmlns:m='urn:hello:sample'>
<return xsi:type='xsd:string'>Hello from Padova!</return>
</m:sayHelloResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
---

[ connection1on8090: HttpSocketSoapServerConnection.java:277 process ] TRACE: sending response heade
rs
[ connection1on8090: HttpSocketSoapServerConnection.java:284 process ] sending response body
[ connection1on8090: HttpSocketSoapServerConnection.java:288 process ] sending response finished
[ connection1on8090: HttpSocketSoapServerConnection.java:290 process ] RETURN
[ connection1on8090: HttpSocketSoapServerConnection.java:91 run ] closing socket
[ connection1on8090: HttpSocketSoapServerConnection.java:97 run ] connection thread finished



--
The ancestor of every action is a thought. - Ralph Waldo Emerson


--------------547855B8992D709887231300
Content-Type: application/x-zip-compressed;
 name="stefano.zip"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="stefano.zip"

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
AAA=
--------------547855B8992D709887231300--