Codebeispiel für Web-Services

Das WSDL-Beispiel (Web Services Description Language) und die Code-Snippets in diesem Artikel veranschaulichen, wie zur Programmierung einer Mediation auf Felder in einer Web-Service-Nachricht zugegriffen wird.

Definition von Web-Service-Nachrichten

Dieser Artikel enthält ein Beispiel für eine Web-Service-Nachricht. Die Eigenschaften einer Nachricht werden in WSDL, einer XML-basierten Sprache definiert, die zur Beschreibung der von einem Geschäft angebotenen Services verwendet wird und festlegt, wie der Zugriff auf diese Services erfolgt.

In diesem Artikel wird veranschaulicht, wie Mediations programmiert werden, sodass sie mit verschiedenen Teilen einer Web-Service-Nachricht arbeiten, die zusammen mit der Darstellung Service Data Objects (SDO) Version 1 im Artikel Zuordnung von SDO-Datengraphen für Web-Service-Nachrichten beschrieben werden. Für jeden Teil der Nachricht gibt es eine XML-Darstellung der Nachricht, die den entsprechenden SDO-Datengraphen darstellt. Zu jeder XML-Beschreibung gibt es Code-Snippets, die veranschaulichen, wie mit diesem Nachrichtenteil gearbeitet wird.

Anmerkung: Im folgenden Beispiel ist das SOAP-Header-Schema in der WSDL enthalten. Alternativ kann das Schema als separates Schema in das SDO-Repository eingefügt werden.

Im Folgenden sehen Sie die WSDL-Beschreibung der Nachricht, die zur Veranschaulichung der nachfolgenden Code-Snippets verwendet wird:

Beschreibung der Web-Service-Nachricht companyInfo

<wsdl:definitions targetNamespace="http://example.companyInfo"
 xmlns:tns="http://example.companyInfo"
 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
 xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
 xmlns:wsdlmime="http://schemas.xmlsoap.org/wsdl/mime/"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">

 <wsdl:types>
  <xsd:schema elementFormDefault="qualified"
   targetNamespace="http://example.header">

   <xsd:element name="sampleHeader">
    <xsd:complexType>
     <xsd:all>
      <xsd:element name="priority" type="xsd:int"/>
     </xsd:all>
    </xsd:complexType>
   </xsd:element>
  </xsd:schema> 

  <xsd:schema elementFormDefault="qualified"
   targetNamespace="http://example.companyInfo">

   <xsd:element name="getCompanyInfo">
    <xsd:complexType>
     <xsd:all>
      <xsd:element name="tickerSymbol" type="xsd:string"/>
     </xsd:all>
    </xsd:complexType>
   </xsd:element>

   <xsd:element name="getCompanyInfoResult">
    <xsd:complexType>
     <xsd:all>
      <xsd:element name="result" type="xsd:float"/>
     </xsd:all>
    </xsd:complexType>
   </xsd:element>
  </xsd:schema>   
  
 </wsdl:types>

 <wsdl:message name="getCompanyInfoRequest">
   <wsdl:part name="part1" element="tns:getCompanyInfo"/>
 </wsdl:message>

 <wsdl:message name="getCompanyInfoResponse">
  <wsdl:part name="part1" element="tns:getCompanyInfoResult"/>
  <wsdl:part name="part2" type="xsd:string"/>
  <wsdl:part name="part3" type="xsd:base64Binary"/>
 </wsdl:message>

 <wsdl:portType name="CompanyInfo">
  <wsdl:operation name="GetCompanyInfo">
   <wsdl:input message="tns:getCompanyInfoRequest"
               name="getCompanyInfoRequest"/>
   <wsdl:output message="tns:getCompanyInfoResponse"
                name="getCompanyInfoResponse"/>
  </wsdl:operation>
 </wsdl:portType>

 <wsdl:binding name="CompanyInfoBinding" type="tns:CompanyInfo">
  <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

  <wsdl:operation name="GetCompanyInfo">
   <wsdlsoap:operation soapAction=""/>
   <wsdl:input name="getCompanyInfoRequest">
    <wsdlsoap:body use="literal"/>
   </wsdl:input>
   <wsdl:output name="getCompanyInfoResponse">
    <wsdlsoap:body use="literal"/>
   </wsdl:output>
  </wsdl:operation>
 </wsdl:binding>

 <wsdl:service name="CompanyInfoService">
  <wsdl:port binding="tns:CompanyInfoBinding" name="SOAPPort">
   <wsdlsoap:address location="http://somewhere/services/CompanyInfoService"/>
  </wsdl:port>
 </wsdl:service>

</wsdl:definitions>

Mit dem Knoten info arbeiten

Nachfolgend sehen Sie ein Beispiel für eine einfache SOAP-Anforderung:
<env:Envelope
  xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'
  xmlns:ns1='http://example.companyInfo'>
    <env:Body>
        <ns1:getCompanyInfo>
            <ns1:tickerSymbol>IBM</ns1:tickerSymbol>
        </ns1:getCompanyInfo>
    </env:Body>
</env:Envelope>
Mit Codefragmenten wie den folgenden können Sie auf die Eigenschaften des Knotens info zugreifen (siehe Allgemeines Layout einer Web-Service-Nachricht):
	 	// Knoten info abrufen (ein untergeordnetes Element des Stammobjekts des Graphen)
	DataObject rootNode = graph.getRootObject();
	DataObject infoNode = rootNode.getDataObject("Info");
  
  // operationName und messageType abfragen
  String opName = infoNode.getString("operationName");
  String type   = infoNode.getString("messageType");

Header bearbeiten

Nachfolgend sehen Sie ein Beispiel für eine SOAP-Anforderung, die einen Header enthält:
<env:Envelope
  xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'
  xmlns:ns1='http://example.companyInfo'>
    <env:Header>
        <example:sampleHeader
          env:mustUnderstand='1'
          xmlns:example='http://example.header'>
            <example:priority>4</example:priority>
        </example:sampleHeader>
    </env:Header>
    <env:Body>
        <ns1:getCompanyInfo>
            <ns1:tickerSymbol>IBM</ns1:tickerSymbol>
        </ns1:getCompanyInfo>
    </env:Body>
</env:Envelope>
Eine Beschreibung der Eigenschaften des Headereintrags mit einer Liste von Headern finden Sie im Artikel Headereintrag. Zur Bearbeitung eines Headereintrags und seiner Eigenschaften verwenden Sie Code wie den folgenden:
	 	 	// Knoten info abrufen (ein untergeordnetes Element des Stammobjekts des Graphen)
    DataObject rootNode = graph.getRootObject();
    DataObject infoNode = rootNode.getDataObject("Info");
    
    // Auf die Liste der Header zugreifen
    List headerEntries = infoNode.getList("headers");
    
    // Ersten Eintrag aus der Liste abrufen
    DataObject headerEntry = (DataObject) headerEntries.get(0);
    
    // Eigenschaft mustUnderstand des Headereintrags abrufen
    boolean mustUnderstand = headerEntry.getBoolean("mustUnderstand");
    
    // Sequenz abrufen, die den Inhalt des Headereintrags enthält
    Sequence headerContent = headerEntry.getSequence("any");
    
    // Ersten Teil des Inhalts aus der Sequenz abrufen
    DataObject header = (DataObject) headerContent.getValue(0);
    
    // Priorität aus dem Header lesen
    int priority = header.getInt("priority");
    
    // Kurzschrift für obige Anweisungen unter Verwendung von SDO-Pfadausdrücken,
    // die beim Knoten info anfangen
    mustUnderstand = infoNode.getBoolean("headers[1]/mustUnderstand");
    priority       = infoNode.getInt("headers[1]/any[1]/priority");

Einen Anhang bearbeiten

Nachfolgend sehen Sie ein Beispiel für eine SOAP-Anforderung, die einen XML-Anhang enthält:
Content-Type: multipart/related; start="<start>"; boundary="boundary"


--boundary
Content-Type: text/xml
Content-Transfer-Encoding: 7bit
Content-ID: <start>

<env:Envelope
  xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'
  xmlns:ns1='http://example.companyInfo'>
    <env:Body>
        <ns1:getCompanyInfo>
            <ns1:tickerSymbol>IBM</ns1:tickerSymbol>
        </ns1:getCompanyInfo>
    </env:Body>
</env:Envelope>
--boundary
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: binary
Content-ID: <myAttachment>

<info>Some attached information</info>
--boundary--
Eine Beschreibung der Eigenschaften des Anhangeintrags (attachmentEntry) mit der Bytefeldgruppe finden Sie im Artikel Anhangseintrag. Zur Bearbeitung eines Headereintrags und seiner Eigenschaften verwenden Sie Code wie den folgenden:
	  	// Knoten info abrufen (ein untergeordnetes Element des Stammobjekts des Graphen)
    DataObject rootNode = graph.getRootObject();
    DataObject infoNode = rootNode.getDataObject("Info");
    
    // Auf die Liste der Anhänge zugreifen
    List attachmentEntries = infoNode.getList("attachments");
    
    // Ersten Eintrag aus der Liste abrufen
    DataObject attachmentEntry = (DataObject) attachmentEntries.get(0);
    
    // Eigenschaft contentId des Headereintrags abfragen
    String contentId = attachmentEntry.getString("contentId");
    
    // Im Anhang enthaltene Daten abrufen
    byte[] data = attachmentEntry.getBytes("data");

Nachrichtenhauptteil (Body) bearbeiten

Nachfolgend sehen Sie ein Beispiel für eine einfache SOAP-Anforderung:
<env:Envelope
  xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'
  xmlns:ns1='http://example.companyInfo'>
    <env:Body>
        <ns1:getCompanyInfo>
            <ns1:tickerSymbol>IBM</ns1:tickerSymbol>
        </ns1:getCompanyInfo>
    </env:Body>
</env:Envelope>
Informationen zum Anzeigen der Hauptteileigenschaften finden Sie im Artikel Layout des Nachrichtenhauptteils. Zur Bearbeitung des Hauptteilinhalts verwenden Sie Code wie den folgenden:
     	// Knoten info abrufen (ein untergeordnetes Element des Stammobjekts des Graphen)
    DataObject rootNode = graph.getRootObject();
    DataObject infoNode = rootNode.getDataObject("Info");

    // Knoten body abrufen
    DataObject bodyNode = infoNode.getDataObject("body");
    
    // Datenobjekt für den ersten Teil des Body abrufen
    DataObject part1Node = bodyNode.getDataObject("part1");
    
    // tickerSymbol abfragen
    String ticker = part1Node.getString("tickerSymbol");
    
    // Kurzschrift für obige Anweisungen unter Verwendung eines SDO-Pfadausdrucks.
    // der beim Knoten info anfängt
    ticker = infoNode.getString("body/part1/tickerSymbol");

Symbol, das den Typ des Artikels anzeigt. Referenzartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rjy1112
Dateiname:rjy1112.html