# XML File generieren



## mockert0612 (5. Aug 2011)

Hallo liebe Community,

Ich bin noch Java Anfänger und muss nun eine XML File in einer Java Klasse generieren und durch Daten von einer Datenbankabfrage befüllen und anschließend an einen WebService als Request senden. Die Datenbankabfrage und das senden an den WebService funktionieren, aber ich kriegs nicht hin das XML File zu generieren und mit den Daten zu befüllen.
Das File muss DynamicAttrubute´s haben, die die Parameter für die Abfrage übergeben
Hier ein Bsp. einer solchen XML File:
[JAVA=42]
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header>
    <eb:Messaging xmlns:eb="http://www.oasis-open.org/committees/ebxml-msg">
      <eb:UserMessage>
        <eb:MessageInfo>
          <eb:MessageId>1afa09bbc5a792abb55a5fd7a8cba512</eb:MessageId>
          <eb:Timestamp>2007-11-12T16:09:18.918+01:00</eb:Timestamp>
        </eb:MessageInfo>
        <ebartyInfo>
          <eb:From>
            <ebartyId eb:type="ApplicationID">ServiceClient</ebartyId>
          </eb:From>
          <eb:To>
            <ebartyId eb:type="ApplicationID">ProMa</ebartyId>
          </eb:To>
        </ebartyInfo>
        <eb:CollaborationInfo>
          <eb:Service eb:type="ProMa">ProjectData</eb:Service>
          <eb:Action>RequestReport</eb:Action>
          <eb:ConversationID>Schaeffler_test_02.08.2011</eb:ConversationID>
        </eb:CollaborationInfo>
      </eb:UserMessage>
    </eb:Messaging>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <ns1:SO_ProMa_Report xmlns:ns1="http://supplyon.com/eai/proma/report">
      <ns1:ApplicationArea>
        <ns1ocInfo>
          <ns1ocName>Request</ns1ocName>
          <ns1:Version>1.0</ns1:Version>
        </ns1ocInfo>
        <ns1ayloadInfo>
          <ns1ayloadId>1</ns1ayloadId>
          <ns1:ExternalApplicationID>1</ns1:ExternalApplicationID>
          <ns1:CreationDateTime>2010-11-21T14:29:56.026+02:00</ns1:CreationDateTime>
        </ns1ayloadInfo>
        <ns1ataProvider>
          <ns1uns>123456789</ns1uns>
          <ns1:eMail>"max.mustermann@yahoomail.com"</ns1:eMail>
        </ns1ataProvider>
      </ns1:ApplicationArea>
      <ns1ataArea>
        <ns1rojectData>
          <ns1ynamicAttribute>
            <ns1:Name>SCOPE</ns1:Name>
            <ns1:Value>Project</ns1:Value>
            <ns1:Type>String</ns1:Type>
          </ns1ynamicAttribute>
          <ns1ynamicAttribute>
            <ns1:Name>CHANGEDATE_LAST</ns1:Name>
            <ns1:Value>10</ns1:Value>
            <ns1:Type>String</ns1:Type>
          </ns1ynamicAttribute>
          <ns1ynamicAttribute>
            <ns1:Name>SYSTEMSTATUS</ns1:Name>
            <ns1:Value>Active</ns1:Value>
            <ns1:Type>String</ns1:Type>
          </ns1ynamicAttribute>
          <ns1ynamicAttribute>
            <ns1:Name>SYSTEMSTATUS</ns1:Name>
            <ns1:Value>Closed</ns1:Value>
            <ns1:Type>String</ns1:Type>
          </ns1ynamicAttribute>
          <ns1ynamicAttribute>
            <ns1:Name>SYSTEMSTATUS</ns1:Name>
            <ns1:Value>Cancelled</ns1:Value>
            <ns1:Type>String</ns1:Type>
          </ns1ynamicAttribute>
          <ns1ynamicAttribute>
            <ns1:Name>SYSTEMSTATUS</ns1:Name>
            <ns1:Value>Archived</ns1:Value>
            <ns1:Type>String</ns1:Type>
          </ns1ynamicAttribute>
          <ns1ynamicAttribute>
            <ns1:Name>SYSTEMSTATUS</ns1:Name>
            <ns1:Value>Created</ns1:Value>
            <ns1:Type>String</ns1:Type>
          </ns1ynamicAttribute>
          <ns1ynamicAttribute>
            <ns1:Name>SHOW_DELETED</ns1:Name>
            <ns1:Value>yes</ns1:Value>
            <ns1:Type>String</ns1:Type>
          </ns1ynamicAttribute>
        </ns1rojectData>
      </ns1ataArea>
    </ns1:SO_ProMa_Report>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
[/code]


Ich bin Dankbar für jede Antwort!

Gruß
Kevin


----------



## JohannisderKaeufer (5. Aug 2011)

Gibt es für den Webservice den du benutzen möchtest ein WSDL-Dokument?

Java bringt Tools mit, mit denen du aus einer WSDL einen Webservice-Client bauen kannst.
Namentlich JaxWS. Alternativ gibt es auch Axis2.

Bei dem Generierten-Client arbeitest du mit Pojos und der generierte Client kümmert sich daraus das passende XML zu machen und um den Versand an den Webservice.


----------



## mockert0612 (8. Aug 2011)

Ahh okay...
also es gibt eine WSDL Datei zu diesem Webservice, jedoch kann ich auf diese noch nicht zugreifen aufgrund von einer Firewall... meine IP muss erst noch für diese freigeschaltet werden.
Kannst du mir erklären wie ich das mir JaxWS machen kann?

Vielen Dank


----------



## JohannisderKaeufer (8. Aug 2011)

Zuerst brauchst du das wsimport-Tool. Das liegt normalerweise unter deinem JDK_HOME\bin.
Wenn die eingabe von wsimport nichts bringt, dann heißt es PATH anpassen.


```
wsimport -d  output -p yourcompany.webservice.packagename -keep http://path.to.the?wsdl
```

Damit generierst du dir einen rudimentären Client.
-d gibt an wohin der output wandert
-p ist das package welches für die generierten Klassen verwendet wird.
-keep sorgt dafür das die *.java Dateien bleiben, ansonsten gibt es nur Compilierte *.class-Dateien
und schließlich die Adresse wo das wsdl-File zu finden ist.

Wie du das ganze dann nutzen kannst hängt vom jeweiligen Webservice ab.

Es sieht meist aber so aus


```
FooEndpoint endpoint = new FooEndpointService().getFooPort();
Bar bar = endpoint.getBar("FooBar");
```

Bei den generierten Sachen gibt es immer eine Klasse ...Endpoint und eine Klasse ...Service.
Der Service hat dann in der Regel eine Methode ...Port.

Und auf dem endpoint findest du dann die Methoden die du auf deinem Webservice aufrufen kannst.


----------

