Hoi,
Wij zitten met een probleempje wat betreft Java webservices. Wij willen graag een zelf-gedefiniëerd object oversturen via SOAP, naar een .NET compact framework applicatie gemaakt in Visual Studio 2008.
We hebben zelf de volgende simpele klasse gemaakt:
Deze klasse bevat ook de standaard dingen zoals getters & setters, en de constructor (ivm ruimte even weggelaten).
In de SOAP klasse definieren we de methode alsvolgt:
Hiervan genereren we in Eclipse een WSDL, welke we vervolgens in tomcat 5.5 deployen, en vanuit daar aanroepbaar is.
Als we in de .NET applicatie de aanroep doen, krijgen we de volgende response:
Echter geeft Visual Studio een melding dat dit niet correct is, en blijven de attributen van de klasse leeg.
In Visual Studio roepen we de webservice aan op de volgende manier:
We hebben in .NET op twee manieren geprobeerd de waardes terug te krijgen. Als service reference ( nieuwe manier ) en als web reference ( oude manier ). Op de nieuwe manier krijgen we een exception en bij de oude manier blijven de waardes leeg.
We hebben de gegenereerde WSDL ook online staan:
http://vps.icaryou.com:8080/ComTest/wsdl/ComTestImpl.wsdl
We hebben zelf op google gezocht, maar er valt eigenlijk bar weinig over te vinden. Ook hebben we geprobeerd om simpele Strings / primitieve typen over te sturen. Dit ging wel succesvol.
De TestClass bevat enkel en alleen primitieve typen, dus dit zou opzich geen probleem moeten opleveren.
Toch krijgen we de foutmelding, zoals hij in het stukje C# beschreven staat.
Hopelijk kunnen jullie ons helpen, met wat er precies mis gaat, en hoe we dit kunnen oplossen.
Wij zitten met een probleempje wat betreft Java webservices. Wij willen graag een zelf-gedefiniëerd object oversturen via SOAP, naar een .NET compact framework applicatie gemaakt in Visual Studio 2008.
We hebben zelf de volgende simpele klasse gemaakt:
Java:
1
2
3
4
5
6
7
8
9
10
| public class TestClass { private String naam; private int nummer; private double kosten; public TestClass() { } |
Deze klasse bevat ook de standaard dingen zoals getters & setters, en de constructor (ivm ruimte even weggelaten).
In de SOAP klasse definieren we de methode alsvolgt:
Java:
1
2
3
4
| public TestClass getTestClass() throws RemoteException { return new TestClass( "Nick", 1, 1.5); } |
Hiervan genereren we in Eclipse een WSDL, welke we vervolgens in tomcat 5.5 deployen, en vanuit daar aanroepbaar is.
Als we in de .NET applicatie de aanroep doen, krijgen we de volgende response:
XML:
(Bekeken met een packet sniffer)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: text/xml;charset=utf-8 Transfer-Encoding: chunked Date: Mon, 23 Jun 2008 15:58:11 GMT 1a5 <?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> <getTestClassResponse xmlns="http://com"> <getTestClassReturn> <kosten>1.5</kosten> <naam>Nick</naam> <nummer>1</nummer> </getTestClassReturn> </getTestClassResponse> </soapenv:Body> </soapenv:Envelope> |
Echter geeft Visual Studio een melding dat dit niet correct is, en blijven de attributen van de klasse leeg.
In Visual Studio roepen we de webservice aan op de volgende manier:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| /* * Values of the class are empty.. ( int = 0 , string = "" ) */ WebReference.ComTestImplService service = new WebReference.ComTestImplService(); WebReference.TestClass bla = service.getTestClass(); MessageBox.Show(bla.nummer.ToString()); // Empty string! /* Er is een uitzondering opgetreden in de formatter bij de poging het bericht * Er is een fout opgetreden tijdens de poging parameter http://com:getTestClassResponse * te deserialiseren. Het InnerException-bericht is Fout in regel 1 positie 365. * EndElement getTestClassReturn van naamruimte http://com wordt niet verwacht. * kosten wordt verwacht.. Zie InnerException voor meer details. te deserialiseren. */ ServiceReference1.ComTestImplClient client = new WindowsFormsApplication2.ServiceReference1.ComTestImplClient(); ServiceReference1.TestClass testClass = client.getTestClass(); |
We hebben in .NET op twee manieren geprobeerd de waardes terug te krijgen. Als service reference ( nieuwe manier ) en als web reference ( oude manier ). Op de nieuwe manier krijgen we een exception en bij de oude manier blijven de waardes leeg.
We hebben de gegenereerde WSDL ook online staan:
http://vps.icaryou.com:8080/ComTest/wsdl/ComTestImpl.wsdl
We hebben zelf op google gezocht, maar er valt eigenlijk bar weinig over te vinden. Ook hebben we geprobeerd om simpele Strings / primitieve typen over te sturen. Dit ging wel succesvol.
De TestClass bevat enkel en alleen primitieve typen, dus dit zou opzich geen probleem moeten opleveren.
Toch krijgen we de foutmelding, zoals hij in het stukje C# beschreven staat.
Hopelijk kunnen jullie ons helpen, met wat er precies mis gaat, en hoe we dit kunnen oplossen.