Ich habe folgende XML Schema entworfen:
---------------------------
<?xml version="1.0" encoding="utf-16"?>
<xsd:schema attributeFormDefault="unqualified"
elementFormDefault="qualified" version="1.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://watergauge.types.webservices.pegelsuite.uni_koblenz.de"
targetNamespace="http://watergauge.types.webservices.pegelsuite.uni_koblenz.de">
<xsd:element name="waterGauge" type="waterGaugeType" />
<xsd:complexType name="waterGaugeType">
<xsd:sequence>
<xsd:element name="locationNumber" type="xsd:string" />
<xsd:element name="locationName" type="xsd:string"
minOccurs="0" />
<xsd:element name="ipAddress" type="xsd:string"
minOccurs="0" />
<xsd:element name="getTimeSeriesPath" type="xsd:string"
minOccurs="0" />
<xsd:element name="sensorNumber" type="xsd:integer"
minOccurs="0" />
<xsd:element name="sensorCount" type="xsd:integer"
minOccurs="0" />
<xsd:element name="parameter" type="xsd:string"
minOccurs="0" />
<xsd:element name="maxSensorDeviation" type="xsd:double"
minOccurs="0" />
<xsd:element name="qualityRemark" type="xsd:double"
minOccurs="0" />
<xsd:element name="from" type="xsd:dateTime" minOccurs="0" />
<xsd:element name="to" type="xsd:dateTime" minOccurs="0" />
<xsd:element name="timeStamp" type="xsd:dateTime"
minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
---------------------------
Gemeint ist, dass dieses Schema den Namensraum
wg=http://watergauge.types.webservices.pegelsuite.uni_koblenz.de
besitzt. Also, dass das Element wg:waterGauge vom Typ wg:waterGaugeType ist.
Wenn ich das Schema allerdings mit xjc nach Java importiere und es als
Eingabe für einen WebService mit dem Namespace
dbh=http://databasewebservice.webservices.pegelsuite.uni_koblenz.de
verwende, dann erzeugt dieser das Element wg:waterGauge vom Typ
dbh:waterGaugeType.
Die Signatur des Web Services ist:
---------------------------
package de.uni_koblenz.pegelsuite.webservices.databasewebservice;
@WebService(name = "databaseWebService", serviceName =
"databaseWebService", targetNamespace =
"http://databasewebservice.webservices.pegelsuite.uni_koblenz.de")
@SOAPBinding(style = Style.DOCUMENT)
@XmlSeeAlso( { org.w3._2000._09.xmldsig_.ObjectFactory.class,
org.oasis_open.docs.wss._2004._01.oasis_200401_wss_wssecurity_secext_1_0.ObjectFactory.class,
org.xhydro.minimal._2009._09.ObjectFactory.class,
org.oasis_open.docs.wss._2004._01.oasis_200401_wss_wssecurity_utility_1_0.ObjectFactory.class,
de.uni_koblenz.pegelsuite.webservices.types.sensordatalist.ObjectFactory.class
} )
public class DatabaseWebService {
@WebMethod(action = "getSensorDataList")
@WebResult(name = "sensorDataList", targetNamespace =
"http://sensordatalist.types.webservices.pegelsuite.uni_koblenz.de")
public SensorDataListType getSensorDataList(@WebParam(name =
"waterGauge", targetNamespace =
"http://watergauge.types.webservices.pegelsuite.uni_koblenz.de")
WaterGaugeType waterGauge) ;
---------------------------
Wo ist da was fehlgeschlagen? Liegt es bereits am Schema? Ist beim
generieren was schief gelaufen oder habe ich einen Fehler bei der
Signatur des Web Services gemacht?
Hierbei handelt es sich um ein Doppelposting, da man mich von XML nach
Java verwiesen hat. Es scheint wohl doch eher was auf der Java-Seite
nicht zu stimmen. Das original Posting findet ihr hier:
http://www.tutorials.de/xml-technologien/364851-fehler-im-xml-schema.html
TIA
DAB268
targetNamespace="http://watergauge.types.webservices.pegelsuite.uni_koblenz.de">
ns:tns="http://watergauge.types.webservices.pegelsuite.uni_koblenz.de"
<xsd:element name="waterGauge" type="tns:waterGaugeType" />
machen.
Gruss
Bernd
Ist da ein Unterschied zu meiner Lösung?
targetNamespace="http://watergauge.types.webservices.pegelsuite.uni_koblenz.de">
xmlns="http://watergauge.types.webservices.pegelsuite.uni_koblenz.de"
<xsd:element name="waterGauge" type="waterGaugeType" />
Ich hab das so verstanden, dass xmlns der Standard-Namenraum ist, wenn
keine spezieller verwendet wird. Vodaher würde ich sagen, wären die
beiden Lösungen gleich.
Kann das bitte mal einer bestätigen oder widerlegen?
TIA
Chistian
Hat hier keiner eine Idee, woran es leigen könnte? Der Grund liegt
definitiv in Java, da das XML-Schema korrekt ist.
Greetz
Christian
Hast du mein Tipp denn probiert? Wenn du dem Schema Parser durch expliziten
Namensraum auf die Sprünge hilfst, könnte das Java genug sein.
Gruss
Bernd
Ja habe ich. Die Output-Dateien von xjc unterscheiden sich lediglich in
der Uhrzeit des JAXB Kommentars. :-(
Greetz
Christian
Wenn der Grund definitiv in Java liegt, dann musst Du wohl einen Workaround
bauen oder einen Bug bei Oracle absetzen und auf ein Fix warten.
Muss denn das alles so gemacht werden? Ich habe verstanden, dass Du aus
einem Schema per JAXB Klassen generierst. Außerdem willst Du die Klasse in
einem WebService verwenden. Du kannst den WebService doch auch per Hand
schreiben und dabei den richtigen Namespace angeben. Die Logik des
WebServices musst Du doch sowieso programmieren, oder?
Gruß,
Daniel
Hast Du Dein Problem mittlerweile gelöst? Ich hatte gerade mal wieder
intensiv mit Web-Services zu tun und dachte, mir mit meinem neu erlangten
Wissen noch einmal Dein Problem anzuschauen. Leider ist mir immer noch nicht
ganz klar, was Du eigentlich gemacht hast. Top-Down oder Buttom-up Ansatz?
Die Signatur Deines Web-Services sieht korrekt aus. Vegleiche hierzu auch
https://jax-ws.dev.java.net/jax-ws-ea3/docs/annotations.html.
Woran merkst Du denn, dass sich der Paramater im falschen Namespace
befindet? Kannst Du vielleicht mal die vom Server generierte WSDL ranhängen?
Außerdem wäre es sinnvoll, mal die JAX-WS Implementierung zu nennen, da jede
Implementierung ihre eigenen Bugs mitbringt.
Gruß,
Daniel