Sinds kort ben ik bezig om via .NET mobile pages contact te leggen met mijn (eerste) Java webservice. Vrijwel alles gaat goed, maar ik stuit nu op een probleem waar ik het antwoord maar niet op kan vinden.
Ik heb de volgende java classes welke door de webservice worden verzonden.
De waarden van ServicePropertiesValueObject zijn gewoon gevuld nadat ik de web service heb aangeroepen, maar van het object PropertyDescriptor zijn de waarden null / 0.
Ik denk dat het probleem ligt in het feit dat de java class gebruik maakt van overerving (doen de andere classes van de web service namelijk niet) en het lijkt alsof .NET de wsdl niet helemaal begrijpt.
Voor het publiceren van mijn Web service gebruik ik Axis en volgens de SOAPMonitor wordt de data gewoon verzonden, dus daar zit het probleem niet.
Hier de snippet van de wsdl:
Wat ik hiervan niet helemaal snap van de wsdl is dat de (target)namespace attributen in de <schema> en <import> tags lijken omgedraaid voor beide declaraties.
Verder heb ik in .NET een webreference aangemaakt welke bijna geheel werkt, m.u.v. de data in het PropertyDescriptor object. In de Reference.cs file ziet het er als volgt uit:
Heeft iemand enig idee waarom mijn objecten niet goed gevuld worden??
Ik heb de volgende java classes welke door de webservice worden verzonden.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| public class ServicePropertiesValueObject extends PropertyDescriptor { private String[] values; public ServicePropertiesValueObject() { values = new String[0]; } public String[] getValues() { return values; } public void setValues(String[] values) { this.values = values; } } public class PropertyDescriptor { protected String description; protected String unit; protected int orderNumber; public PropertyDescriptor() { } ..... hier staan de getters en setters } |
De waarden van ServicePropertiesValueObject zijn gewoon gevuld nadat ik de web service heb aangeroepen, maar van het object PropertyDescriptor zijn de waarden null / 0.
Ik denk dat het probleem ligt in het feit dat de java class gebruik maakt van overerving (doen de andere classes van de web service namelijk niet) en het lijkt alsof .NET de wsdl niet helemaal begrijpt.
Voor het publiceren van mijn Web service gebruik ik Axis en volgens de SOAPMonitor wordt de data gewoon verzonden, dus daar zit het probleem niet.
Hier de snippet van de wsdl:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| <wsdl:types> <schema elementFormDefault="qualified" targetNamespace="http://www.standeman.com"> <import namespace="http://search.productcontrol.standeman.com"/> <complexType name="ServicePropertiesValueObject"> <complexContent> <extension base="tns1:PropertyDescriptor"> <sequence> <element name="values" nillable="true" type="impl:ArrayOf_xsd_string"/> </sequence> </extension> </complexContent> </complexType> </schema> <schema elementFormDefault="qualified" targetNamespace="http://search.productcontrol.standeman.com"> <import namespace="http://www.standeman.com"/> <complexType name="PropertyDescriptor"> <sequence> <element name="description" nillable="true" type="xsd:string"/> <element name="orderNumber" type="xsd:int"/> <element name="unit" nillable="true" type="xsd:string"/> </sequence> </complexType> </schema> </wsdl:types> |
Wat ik hiervan niet helemaal snap van de wsdl is dat de (target)namespace attributen in de <schema> en <import> tags lijken omgedraaid voor beide declaraties.
Verder heb ik in .NET een webreference aangemaakt welke bijna geheel werkt, m.u.v. de data in het PropertyDescriptor object. In de Reference.cs file ziet het er als volgt uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| [System.Xml.Serialization.XmlTypeAttribute(
Namespace="http://search.productcontrol.standeman.com")]
[System.Xml.Serialization.XmlIncludeAttribute(typeof(ServicePropertiesValueObject))]
public class PropertyDescriptor {
[System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
public string description;
public int orderNumber;
[System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
public string unit;
}
[System.Xml.Serialization.XmlTypeAttribute(
Namespace="http://www.standeman.com")]
public class ServicePropertiesValueObject : PropertyDescriptor {
[System.Xml.Serialization.XmlArrayAttribute(IsNullable=true)]
[System.Xml.Serialization.XmlArrayItemAttribute("values", IsNullable=false)]
public string[] values;
} |
Heeft iemand enig idee waarom mijn objecten niet goed gevuld worden??
[ Voor 9% gewijzigd door Standeman op 15-09-2005 10:27 ]
The ships hung in the sky in much the same way that bricks don’t.