Announcement

Collapse
No announcement yet.

Java Webservice mit C# konsumieren - org.w3c.dom.Element als Input benötigt

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Java Webservice mit C# konsumieren - org.w3c.dom.Element als Input benötigt

    Hallo,

    ich bin neu in der C#-Programmierung, habe allerdings ein wenig Java-Erfahrung...

    Es gibt einen Java Webservice, den ich mit einem einfachen C#-Client konsumieren möchte (Windows Application genügt erstmal). Das Problem ist, dass der Webservice als Input ein DOM Element vom Java-Typ 'org.w3c.dom.Element' benötigt, allerdings ist dieses als Eigenschaft eines speziellen Java-Typs definiert.

    Ich habe versucht, mit 'XmlElement' aus 'System.Xml' ein solches DOM Element zu generieren und als Eigenschaft an diesen Typ zu übergeben, doch ich bekomme folgende Fehler-Meldung: "Cannot implicitly convert type 'System.Xml.XmlElement' to 'PartnerFinding.NET.Client.partnerFinding.findPart nerRequestPreferenceProfile".

    Um es klarer zu machen, die <types>-Sektion meiner WSDL sieht folgendermaßen aus:
    <types>
    <xsd:schema>
    <xsd:element name="findPartnerRequest" type="tns:findPartnerRequest"/>
    <xsd:element name="findPartnerResponse" type="tns:findPartnerResponse"/>
    <xsd:complexType name="findPartnerRequest"> (das ist der spezielle Java-Typ, der nur ein DOM Element als Eigenschaft enthält)
    <xsd:sequence>
    <xsd:element name="preferenceProfile"> (das ist das betrachtete DOM Element als Eigenschaft von 'findPartnerRequest')
    <xsd:annotation>
    <xsd:appinfo>
    <jaxb:dom/>
    (bei der Generierung des Webservice wurde durch diese Annotation ein DOM Element als Input definiert)
    </xsd:appinfo>
    </xsd:annotation>

    <xsd:complexType>
    ... (der Inhalt des DOM Elements, der vom Webservice verarbeitet wird)
    </xsd:complexType>
    </xsd:element>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:schema>
    </types>

    Im Java Webservice enthält der Java-Typ 'findPartnerRequest' das DOM Element 'preferenceProfile' als Eigenschaft. Die SOAP-Nachricht aus einem funktionierenden Java Webservice Client sieht dann folgendermaßen aus:

    <?xml version="1.0" encoding="UTF-8"?>
    <soapenv:Envelope xmlns:ns1="http://webservice.amplify.org/"
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soapenv:Body>
    <ns1:findPartnerRequest>
    <preferenceProfile>
    ... (der Inhalt des DOM Elements, der vom Webservice verarbeitet wird)
    </preferenceProfile>
    </ns1:findPartnerRequest>
    </soapenv:Body>
    </soapenv:Envelope>

    Bei der Generierung der Webservice Reference in Visual C# Express Edition werden mir verschiedene Typen erstellt, unter anderem:
    'PartnerFinding.NETClient.partnerFinding.findPartn erRequest' und
    'PartnerFinding.NETClient.partnerFinding.findPartn erRequestPreferenceProfile'.

    Und genau diesem Typ 'findPartnerRequestPreferenceProfile' muss ich das DOM Element übergeben, doch ich bekomme die oben genannte Fehlermeldung!

    Mein Code sieht etwa folgendermaßen aus:

    ...
    using System.Xml;
    using PartnerFinding.NETClient.partnerFinding;
    ...

    try
    {
    // Webservice instanziieren
    PartnerFindingService service = new PartnerFindingService();

    // Laden eines XML-Dokuments
    // Root-Element soll dann als DOM Element an Webservice übergeben werden
    XmlDocument document = new XmlDocument();
    document.Load(pathLabel.Text);
    XmlElement element = document.DocumentElement;

    // Input für Webservice bzw. Request generieren
    findPartnerRequest request = new findPartnerRequest();
    // Hier kommt der Fehler - ein Type-Cast-Problem!:
    findPartnerRequestPreferenceProfile profile =
    (findPartnerRequestPreferenceProfile) element;

    request.preferenceProfile = profile;

    // Webservice konsumieren (Response ist ein Array)
    findPartnerResponseRanking[] ranking = service.findPartner(request);
    }

    Weiß jemand, wie ich dieses DOM Element ('element' vom Typ 'XmlElement') auf den Typ 'findPartnerRequestPreferenceProfile' casten kann? Eigentlich ist letzterer ja nichts weiter als ein DOM Element - im Java Webservice ist er vom Typ 'org.w3c.dom.Element' und ein Java Webservice Client konnte diesen Webservice problemlos aufrufen, indem einfach eine Instanz vom Typ 'org.w3c.dom.Element' als Eigenschaft 'preferenceProfile' einer Klasse vom Typ 'findPartnerRequest' übergeben wurde.

    Nur leider klappt das mit C# nicht ganz, da mir der Typ 'findPartnerRequestPreferenceProfile' über die Webservice Reference generiert wurde, dem ich allerdings kein 'XmlElement' übergeben kann. Wie könnte ich denn noch ein DOM Element bekommen, das ich an diesen speziellen Typen casten könnte?

    Ich hoffe, jemand kann mir wenigstens einen Tipp geben, da die Interoperabilität dieses Java Webservices mit einem C#-Client gewährleistet sein sollte...

    Herzlichen Dank!

    Viele Grüße,
    Kevin
Working...
X