[.NET] Web services Java --> .NET & class inheritance

Pagina: 1
Acties:

  • Standeman
  • Registratie: November 2000
  • Laatst online: 07:18

Standeman

Prutser 1e klasse

Topicstarter
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.
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.


  • Standeman
  • Registratie: November 2000
  • Laatst online: 07:18

Standeman

Prutser 1e klasse

Topicstarter
Ok.... dit is handig.. een topic openen om gelijk zelf het antwoord neer te zetten... 8)7

Het blijkt dus in de namespace te zitten welke de wsdl aangeeft van het object.
code:
1
2
3
<schema elementFormDefault="qualified" 
targetNamespace="http://search.productcontrol.standeman.com">
<import namespace="http://www.standeman.com"/>

door mijn Reference.cs in .NET aangepast te hebben (de namespace van het object gewijzigd te hebben) van
code:
1
(Namespace="http://advancedsearch.productcontrol.standemancom")

naar
code:
1
(Namespace="http://www.standeman.com")

heeft het probleem opgelost. In principe zit de fout dus in Axis, aangezien deze de verkeerde namespace voor het object aangeeft. Het zal waarschijnlijk wel wat met de configuratie te maken hebben (er lopen wel meer dingen niet helemaal lekker in de gegenereerde wsdl).

[ Voor 35% gewijzigd door Standeman op 15-09-2005 10:30 ]

The ships hung in the sky in much the same way that bricks don’t.