Objekte mit Axis übertragen

Status
Nicht offen für weitere Antworten.

Herr Lehmann

Neues Mitglied
hallo!

ich arbeitete zur zeit an einer java-webservice-anwendung mit axis. dabei muss ich unter anderem auch java-objekte zum client kriegen.

ich hab bereits herausgefunden wie man z.b. arrays überträgt, oder objekte von selbst geschriebenen, java-bean-konformen klassen, jedoch stehe ich jetzt vor folgendem problem:
ich möchte jetzt als ergebnisliste ein array an den client schicken. das array soll aber von einem selbst definiertem, komplexen datentyp sein.

die entsprechende methode des servers könnte z.b. so aussehen:
Code:
	public static Auto[] autoSuche(String[] suchBegriffe){
		
		Auto[] results = ...; // Array mit den gefundenen Autos
		
		return results;
	}

geht das überhaupt?!?

wenn ja: was muss man alles beim deployment angeben/beachten?

wenn nein: wie könnte man das problem umgehen? wäre es vielleicht möglich, das array vorm übertragen auf (Object) und beim client wieder auf (Auto) herunter zu casten?

bin für jeden tip dankbar!

thx, herr lehmann.
 
S

SlaterB

Gast
mir ist die Syntax und der ganze Vorgang gerade nicht so bewußt,
aber wenn du ein einzelnes Objekt einer eigenen Klasse übertragen kannst
und auch weißt, wie man z.B. ein Object[] überträgt,
dann muss es doch möglich sein, auch ein Auto[] zu definieren?
einfach 'Object' durch 'Auto' ersetzen?

--------

wenn die Übertragung einzelner Objekte geht, diese also serialisierbar usw. sind,
dann denke ich, dass du die Objekte auch in Objekt[] legen kannst + übertragen + richtig wieder entpacken,
ja,

müsste also beides gehen, was spricht gegen Ausprobieren?
 

Herr Lehmann

Neues Mitglied
es funktioniert beides leider nicht. der service wird zwar fehlerfrei deployed, jedoch meldet sich sich axis im browser beim aufruf des service mit:


AXIS error
Could not generate WSDL!
There is a service at this location, but Axis did not generate the WSDL for it. Perhaps it is is misconfigured.
 
S

SlaterB

Gast
dann poste bitte das WSDL,

übrigens, wenn du für zweite Idee einfach ein Object[] nimmst,
wie kann dann das WSDL-File wissen was da drin ist? ;)
sowas kann doch unmöglich zu einem WSDL-Fehler führen,
es sei denn natürlich, du weißt generell nicht, wie man ein Object[] deklariert
 
G

Guest

Gast
du hast recht :? da hab ich ja das komplette deployment vergessen. *peinlich*
meine frage war ja ursprünglich wie ich eine Auto[]-Objekt deklariere.
konnte aber beim überfliegen des wang/frotscher-buches bisher auch kein beispiel dazu finden.

bin jetzt völlig *confused* :?:

die ursprüngliche version der anwendung hätte folgenden deployment-d. gehabt:

Code:
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
			xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
	<service name="SimpleSample" provicer="java:RPC">
		<parameter name="className"
			value="simplesample.server"/>
		<paramater name="allowedMethods"
			value="metaSearch"/>
		<parameter name="scope"
			value="session"/>
		<typeMapping qname="myNS:Sample" 
				xmlns:myNS="http://sample.simplesample"
			languageSpecificType="java:simplesample.sample.Sample"
			serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
			deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
			encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
	</service>
</deployment>

es geht dabei eigentlich um die klasse Sample.java.
mit dem deployment-d. von oben würde jetzt ein einzelnes, in dem fall "Sample"-Objekt übertragen. wie kriege ich das ganze jetzt so verpackt, dass ich ein Array an Sample_Objekten als returnwert zurückgeben kann?
 
S

SlaterB

Gast
tja, das ist jetzt nicht die Syntax die ich so von WSDL kenne,
meintest du nicht, du weißt schon wie es mit einem Object[] geht?
wäre dann ja interessant zu wissen, wie das aussieht,

ich kenn eher die Form
Code:
<xsd:complexType name="extReference">
<xsd:sequence>
  <xsd:element name="attributeName"      type="xsd:string" maxOccurs="unbound" minOccurs="1"/>
  <xsd:element name="refTableName"       type="xsd:string" maxOccurs="1"       minOccurs="1"/>
  <xsd:element name="refPKAttributeName" type="xsd:string" maxOccurs="unbound" minOccurs="1"/>
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="extTable">
<xsd:sequence>
  <xsd:element name="name" type="xsd:string" maxOccurs="1" minOccurs="1"/>
  <xsd:element name="attribute" type="tns:extAttribute" maxOccurs="unbound" minOccurs="1"/>
  <xsd:element name="PKAttributeName" type="xsd:string" maxOccurs="unbound" minOccurs="1"/>
  <xsd:element name="reference" type="tns:extReference" maxOccurs="unbound" minOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
ein Array ist da maxOccurs > 1
 
G

Guest

Gast
nein, ich weiß leider nicht wie man ein Object[] deklariert.

aber vielleicht kann mir da jemand weiterhelfen :D
 
S

SlaterB

Gast
was genau ist eigentlich das Axis, das du benötigst,
wofür setzt du das ein, welche Programme/ Protokolle sind da im Spiel,
welche speziellen WSDL-Versionen (falls es unterschiedliche gibt ;) )

wie sieht mit allgemeinen Tutorials aus, z.B.
http://ws.apache.org/axis/java/user-guide.html#Java2WSDLBuildingWSDLFromJava

hat das was mit deinen Anforderungen zu tun?
da gibt es so ein nettes Java2WSDL tool,
da könntest du dir ein Java-Inferface mit einer Operation mit Parameter Auto[] bauen und dir automatisch ein WSDL-Dokument zu erstellen lassen,

hilft sowas irgendwie weiter oder bist du ganz woanders?
 

SnooP

Top Contributor
Google könnte dir doch sicher helfen, oder nicht?

Für dein Auto kannst du doch schonmal ein complex-type angeben, für diesen complex-type muss man dann noch zusätzlich einen entsprechenden compley-type für das array angeben, guck doch z.B. mal hier: http://www.oreilly.com/catalog/webservess/chapter/ch06.html#73414

aber mit java2wsdl sollte das eigentlich auch schon hinhaun ;) ... der sollte dir auch automatisch den wsdd dazu erstellen, wo für dieses array dann ein entsprechendes typeMapping angegeben wird.

zu deinem descriptor müsste dann eigentlich automatisch noch das hier dazukommen:
Code:
<typeMapping qname="myNS:ArrayOf_..._Sample"
   xmlns:myNS="services:Samples"
   languageSpecificType="java:simplesample.sample.Sample[]"
   serializer="org.apache.axis.encoding.ser.ArraySerializerFactory"
   deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory"
   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
 
G

Guest

Gast
danke an SnooP!

für diesen complex-type muss man dann noch zusätzlich einen entsprechenden compley-type für das array angeben

das war eigentlich alles was ich wissen wollte. muchas gracias.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B TOMCAT AXIS : Probleme bei parallele Requests Server einrichten und konfigurieren 6
B Axis 2 SOAP Nachricht verdreht Server einrichten und konfigurieren 1
A Axis + WSS4J Server einrichten und konfigurieren 1
M AXIS Fehler bei WS-Security Server einrichten und konfigurieren 1
M ArrayStoreException mit Axis Server einrichten und konfigurieren 3
A AXIS Problem mit Packages beim WSDL-Aufruf Server einrichten und konfigurieren 2
I Axis mit Proxy verwenden - ich werde wahnsinnig ! HELP ! Server einrichten und konfigurieren 4
S Axis Webanwendung in Tomcat verfügbar machen Server einrichten und konfigurieren 2
K [Apache Axis v1.3] HTTP Basic Authentication Server einrichten und konfigurieren 1
B Web Service mit Axis Server einrichten und konfigurieren 3
K [Tomcat+Axis] SSL funktioniert nicht Server einrichten und konfigurieren 2
R axis läuft nicht Server einrichten und konfigurieren 2
G Axis Client: NoSuchMethodError Server einrichten und konfigurieren 2
A axis läuft nicht Server einrichten und konfigurieren 12
M AXIS: Eigene Exceptions an Client übertragen Server einrichten und konfigurieren 2
M Axis - No serializer found for class Server einrichten und konfigurieren 6
C Web Services mit axis Server einrichten und konfigurieren 6
Q Probleme mit Tomcat und Axis Server einrichten und konfigurieren 5

Ähnliche Java Themen

Neue Themen


Oben