私はWebサービスを開発する初心者です。 xjcコマンド(コマンドライン "xjc .... \ MySchema.xsd")を使用してXSDからJavaクラスを作成しました。xfcを使用したJava Webサービスの実装
<?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アプリはいくつかのクラスを生成し、
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();
}
}
"MensEntrada"という着信メッセージを読み取るWebサービスを作成し、 "MensSalida"を返す必要があります。
...
@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;
}
}
をしかし、それは動作しません:
私はこれをしようとしていました。 MensEntradaはどのように読むことができますか? MensSalidaはどのように書くことができますか?
ありがとうございます!
ObjectFactoryを使用してオブジェクトを作成するとすぐに、それらのセッターメソッドを使用してMensSalidaなどのデータを追加します。 ObjectFactoryを読んでみると、より明確になります。 – giro
申し訳ありませんが、あなたの回答を理解できませんでした。 ObjectFactoryでS014を拡張する必要がありますか?問題はAcceptMessageを拡張する必要があることです。または、新しいオブジェクトを作成する必要がありますか?例えば、ObjectFactory ob =新しいObjectFactory(); – user3815866
S014Service#S014(S014)の中でparam.getMensEntrada()を呼び出してみませんか?次に、それを必要に応じて操作し、ms = new ObjectFactory()。createS014ResponseMensSalida()を使用して新しいS014Responseオブジェクトを取得します。次に、そのクラスのS014Response#setMensSalida(S014Response.MensSalida)を使用して、好きな値に設定します。その後、msを返します。 – giro