# SOAP in Java



## FBlack11 (4. Apr 2011)

Hallo,

ich weiss man soll hier nicht ohne konkrete Lösungsvorschläge posten, aber ich bin ziemlich verzweifelt. Ich muss innerhalb von Java SOAP einsetzen um Daten abzufragen. Bin ziemlicher Anfänger und finde im Netz nichts für mich verständliches und die Zeit läuft mir davon. Es geht darum diesen Service einzubinden: http://www.iban-bic.com/fileadmin/SOAP-Schnittstelle.pdf 

Was mir nicht hilft:
Ein komplett fertiger Code, denn dadurch liegt es zwar vor, aber ich verstehe es nach wie vor nicht. 

Was mir hilft: 
Eine Schritt-für-Schritt-Anleitung, die ich nachvollziehen kann, damit ich verstehe was wann wie getan wird.

Wenn das für hier zuviel ist gebe ich gern auf Anfrage meine Mail-Adresse weiter. Ich hoffe das mir hier irgendwer helfen kann, ich weiss sonst nicht was ich tun soll und davon hängt nicht wenig für mich ab.

Danke im voraus, hoffentlich kann mir jemand helfen.

Ein verzweifelter Anfänger


----------



## mvitz (4. Apr 2011)

Im groben musst du folgende Dinge erledigen:


Dich für ein Java SOAP Framework entscheiden
Mithilfe des Frameworks und der WSDL (Befindet sich in dem PDF ganz am Schluss) Java Code generieren
Deinen Client schreiben und dabei die generierten Klassen nutzen

Mit Axis2 (das wäre dann Schritt 1) geht das ungefähr so Apache Axis2 - Apache Axis2 User's Guide- Creating Clients (Schritt 2). Schritt 3 kannst du dann nochmal hier posten wie du das versucht hast.


----------



## ARadauer (4. Apr 2011)

ja wollte gerade fragen, mit welchem framework du das machen willst. oder ist das egal?


----------



## kay73 (4. Apr 2011)

Gibt auch Apache CXF. Griffiges tutorial: Apache CXF -- Developing a Consumer


----------



## FBlack11 (4. Apr 2011)

Versuche mich daran mittels Eclipse. Dieses meldet mir aber mir unverständliche Fehler:


```
<wsdl:portType name="IBAN CalculatorPortType">
	<wsdl:operation name="validate_iban">
		<wsdl:documentation>
			Validates the given IBAN. The user ID and password you need to pass with the request are the same
			you use for logging in as a premium user. This service is available to all premium users who have paid
			their subscription fee. For more details on the subscription model, see www.iban-bic.com.<br>
			Output fields are:<br>
			iban: the IBAN that was validated.<br>
			result: 'passed' or 'failed' - for a valid or invalid IBAN<br>
			checks: an array of the checks performed (can contain elements such as 'length', 'bank_code',
			'account_number', 'iban_checksum').<br>
			bic_candidates: an array of BICs that are associated with the given national bank code. May be empty
			or may contain one or more elements. The BICstruct element has the attributes bic, wwwcount,
			sampleurl, and city. If a wwwcount greater than zero is given, the BIC was harvested from the Web
			(and found on as many pages as indicated by wwwcount, for example at the URL given by sampleurl).
			If wwwcount is zero, the BIC comes from a national bank or the ECB. If city is given, this also
			indicates that the BIC comes from a national bank or the ECB. The given city does not necessarily
			reflect the location of the given branch - it can also be the location of the headquarters.<br>
			country: the ISO country code (first two letters of the IBAN)<br>
			bank_code: the national bank code. Part of the BIC for NL (where no national bank code exists).<br>
			bank: bank name, if known<br>
			bank_address: some address data, if known<br>
			bank_url: URL of website, if known<br>
			branch: branch name, if known<br>
			branch_code: branch code, if known<br>
			account_number: the national bank account number<br>
			account_validation_method: name of the validation algorithm for the national account number<br>
			account_validation: for German or Swiss account numbers, an explanation (in German)<br>
			length_check: 'passed' or 'failed' - for the right number of characters for the given country<br>
			account_check (not provided for every country): 'passed' or 'failed' (checksum validation; if the
			algorithm is unknown, or if there is no checksum, the result is 'passed' or empty).<br>
			bank_code_check (not provided for every country): lookup of national bank code was successful
			('passed') or not ('failed')<br>
			iban_checksum_check: 'passed' or 'failed' (correctness of the two digits right after the country code in
			the IBAN)<br>
			data_age (not given for all countries): age of the BIC and other bank-related data (not defined for data
			harvested from the Web). Format: yyyymmdd.<br>
			IBANformat: a string describing the IBAN format for the given country, for example: 'DEkk BBBB
			BBBB CCCC CCCC CC'.<br>
			formatcomment: an explanation of the IBANformat string, for example: 'B = sort code (BLZ), C =
			account No.'<br>
			balance: the number of remaining calculations you can do before having to recharge your account. This
			does not apply to customers with a subscription which includes an unlimited number of calculations.
		</wsdl:documentation>
...
</wsdl:portType>
```

Zum portType: 
cvc-attribute.3: The value 'IBAN CalculatorPortType' of attribute 'name' on element 'wsdlortType' is not valid with respect to its type, 'NCName'.
cvc-datatype-valid.1.2.1: 'IBAN CalculatorPortType' is not a valid value for 'NCName'.

Und für den mitkopierten documentation-Bereich:
Description	Resource	Path	Location	Type
The element type "br" must be terminated by the matching end-tag "</br>".

Habe keine Ahnung warum und welches <br> Eclipse da kritisiert und was den portType angeht, wie gesagt, bin noch nicht so firm.


----------



## FBlack11 (4. Apr 2011)

Hab mich durchgewühlt. Nur kaum sind Fehler beseitigt präsentiert mir Eclipse neue, vorher nich dagewesene Fehler. Hier ist für mich (vorerst) Ende den Fahnenstange:


```
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="https://ssl.ibanrechner.de/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="eap" targetNamespace="https://ssl.ibanrechner.de/">
  <wsdl:types>
    <xsd:schema targetNamespace="https://ssl.ibanrechner.de/">
      <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
      <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/"/>                        <<< 1
      <xsd:complexType name="ArrayOfString">
        <xsd:complexContent>
          <xsd:restriction base="SOAP-ENC:Array">
            <xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="string[]"/>
          </xsd:restriction>
        </xsd:complexContent>
      </xsd:complexType>
      <xsd:complexType name="BICStruct">
        <xsd:all>
          <xsd:element name="bic" type="xsd:string"/>                                   <<< 2
          <xsd:element name="city" type="xsd:string"/>
          <xsd:element name="wwwcount" type="xsd:int"/>
          <xsd:element name="sampleurl" type="xsd:string"/>
        </xsd:all>
      </xsd:complexType>
      <xsd:complexType name="ArrayOfBICStruct">
        <xsd:complexContent>
          <xsd:restriction base="SOAP-ENC:Array">
            <xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="BICStruct[]"/>      <<< 3
          </xsd:restriction>
        </xsd:complexContent>
      </xsd:complexType>
...
```

Bei allen drei jeweils:

s4s-att-invalid-value: Invalid attribute value for 'base' in element 'restriction'. Recorded reason: UndeclaredPrefix: Cannot resolve 'SOAP-ENC:Array' as a QName: the prefix 'SOAP-ENC' is not declared.

s4s-att-must-appear: Attribute 'base' must appear in element 'restriction'.

Hier verlässt mich mein noch recht bescheidenes Latein. Ich hoffe jemand kann mir weiterhelfen. Auf jeden Fall schonmal riesig Danke für die bisherigen Mühen.


----------



## FBlack11 (5. Apr 2011)

So, habe inzwischen Axis2 installiert. Mein Problem ist SOAP-ENC, das bekomme ich nicht hin. Sobald ich das in die Definitions aufnehme funktioniert der Encoding-Namespace nicht mehr und in der Restriction ist ein nicht definierter complexType. Lasse ich es bei den Definitions weg ist SOAP-ENC ungebunden und dementsprechend nicht nutzbar. An dieser Stelle brauche ich wirklich Hilfe, hier komme ich nicht weiter.


----------

