Ich bin ein Neuling bei der Entwicklung von Web Services. Ich habe Java-Klassen von XSD mit dem Befehl xjc (Befehlszeile "xjc .... \ MySchema.xsd") erstellt.Implementierung von Java Web Service mit xfc
<?xml version="1.0" encoding="UTF-8"?>
<!-- Published by JAX-WS RI (http://jax-ws.java.net). RI's version is JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e. -->
<s:schema elementFormDefault="qualified" targetNamespace="http://SAS.Servicios/" xmlns:s="http://www.w3.org/2001/XMLSchema">
<s:element name="S014">
<s:complexType>
<s:sequence>
<s:element name="MensEntrada">
<s:complexType mixed="true">
<s:choice maxOccurs="unbounded" minOccurs="0">
<s:any processContents="lax"/>
</s:choice>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="S014Response">
<s:complexType>
<s:sequence>
<s:element name="MensSalida">
<s:complexType mixed="true">
<s:choice maxOccurs="unbounded" minOccurs="0">
<s:any processContents="lax"/>
</s:choice>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
XSD app erzeugt einige Klassen,
S014.java
...
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"mensEntrada"
})
@XmlRootElement(name = "S014")
public class S014 {
@XmlElement(name = "MensEntrada", required = true)
protected S014 .MensEntrada mensEntrada;
public S014 .MensEntrada getMensEntrada() {
return mensEntrada;
}
public void setMensEntrada(S014 .MensEntrada value) {
this.mensEntrada = value;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"content"
})
public static class MensEntrada {
@XmlMixed
@XmlAnyElement(lax = true)
protected List<Object> content;
public List<Object> getContent() {
if (content == null) {
content = new ArrayList<Object>();
}
return this.content;
}
}
}
S014Response.java
...
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"mensSalida"
})
@XmlRootElement(name = "S014Response")
public class S014Response {
@XmlElement(name = "MensSalida", required = true)
protected S014Response.MensSalida mensSalida;
public S014Response.MensSalida getMensSalida() {
return mensSalida;
}
public void setMensSalida(S014Response.MensSalida value) {
this.mensSalida = value;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"content"
})
public static class MensSalida {
@XmlMixed
@XmlAnyElement(lax = true)
protected List<Object> content;
public List<Object> getContent() {
if (content == null) {
content = new ArrayList<Object>();
}
return this.content;
}
}
}
ObjectFactory.java
...
@XmlRegistry
public class ObjectFactory {
public ObjectFactory() {
}
public S014Response createS014Response() {
return new S014Response();
}
public S014 createS014() {
return new S014();
}
public S014Response.MensSalida createS014ResponseMensSalida() {
return new S014Response.MensSalida();
}
public S014 .MensEntrada createS014MensEntrada() {
return new S014 .MensEntrada();
}
}
Ich muss einen Web Service erstellen, um eine eingehende Nachricht "MensEntrada" zu lesen und "MensSalida" zurückgeben.
Ich habe versucht, dies:
...
@WebService (serviceName = "S014Service", portName="S014ServiceSoap", targetNamespace = "http://SAS.Servicios/")
public class S014Service extends AcceptMessage {
public S014Service(WebServiceReceiver webServiceReceiver) {
super(webServiceReceiver);
}
@WebMethod(action = "S014")
public S014Response S014(@WebParam(name = "MensEntrada") S014 param) {
String response = param.getMensEntrada().toString();
response = response + "!!!";
S014Response ms = new S014Response();
return ms;
}
}
Aber es funktioniert nicht. Wie kann ich MensEntrada lesen? Wie kann ich MensSalida schreiben?
Vielen Dank im Voraus!
Verwenden Sie die ObjectFactory, um Ihre Objekte zu erstellen, sobald Sie sie haben, verwenden Sie ihre Setter-Methoden, um Ihre Daten hinzuzufügen, wie MensSalida. Lies dir einfach deine ObjectFactory durch und es wird klarer. – giro
Entschuldigung, ich habe deine Antwort nicht verstanden. Soll ich S014 mit ObjectFactory erweitern? Das Problem ist, dass ich AcceptMessage erweitern muss. Oder sollte ein neues Objekt erstellen? Zum Beispiel ObjectFactory ob = new ObjectFactory(); – user3815866
Warum rufen Sie param.getMensEntrada() nicht in S014Service # S014 (S014) auf? Dann manipuliere es wie nötig und benutze dann ms = new ObjectFactory(). CreateS014ResponseMensSalida(), um ein neues S014Response-Objekt zu erhalten. Dann benutze die S014Response # setMensSalida (S014Response.MensSalida) dieser Klasse, um sie auf den von dir gewünschten Wert zu setzen. Dann gib einfach ms zurück. – giro