Я новичок в CXF и JAXB. Я пытаюсь создать WSDL из Java-класса (подход Bottom Up), используя eclipse на CXF.Как избежать CXF Создание отдельного класса, а не использование класса XMLRootElement (класс JAXB)
Создал интерфейс как стипендиаты.
@WebService(name = "EBMData", targetNamespace = "http://business.kp.org/")
public interface EBMData {
@WebMethod
public @WebResult OPStatusDetails addEBMFields(InputFields fields);
@WebMethod
public @WebResult OPStatusDetails addOLIs(InputOLIs olis);
}
Запрос XML JAXB класса выглядит следующим образом
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="InputFields")
@XmlRootElement(name="InputFields")
public class InputFields {
@XmlElement(name="FieldName", required=true)
String fieldName;
@XmlElement(name="Oli", required=true)
List<String> olis;
public String getFieldName() {
return fieldName;
}
public void setFieldName(String fieldName) {
this.fieldName = fieldName;
}
public List<String> getOlis() {
return olis;
}
public void setOlis(List<String> olis) {
this.olis = olis;
}
}
Response Класс XML JAXB выглядит следующим образом
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="OPStatusDetails")
@XmlRootElement
public class OPStatusDetails {
@XmlElement(name="returnMessage", required=true)
String returnMessage;
public String getReturnCode() {
return returnMessage;
}
public void setReturnCode(String returnMessage) {
this.returnMessage = returnMessage;
}
}
После того, как выше класс создается, использовано New-> веб-службы и использовать вариант подбора снизу вверх. и создал WSDL.
После создания WSDL, можно заметить, что новый пакет создан. с файлами AddEBMFields.java
@XmlRootElement(name = "addEBMFields", namespace = "http://business.kp.org/")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "addEBMFields", namespace = "http://business.kp.org/")
public class AddEBMFields {
@XmlElement(name = "arg0")
private org.kp.business.xmls.InputFields arg0;
public org.kp.business.xmls.InputFields getArg0() {
return this.arg0;
}
public void setArg0(org.kp.business.xmls.InputFields newArg0) {
this.arg0 = newArg0;
}
}
и AddEBMFieldsResponse.java
@XmlRootElement(name = "addEBMFieldsResponse", namespace = "http://business.kp.org/")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "addEBMFieldsResponse", namespace = "http://business.kp.org/")
public class AddEBMFieldsResponse {
@XmlElement(name = "return")
private org.kp.business.xmls.OPStatusDetails _return;
public org.kp.business.xmls.OPStatusDetails getReturn() {
return this._return;
}
public void setReturn(org.kp.business.xmls.OPStatusDetails new_return) {
this._return = new_return;
}
}
Из-за эти файлы моего запроса XML генерирует следующим образом, вместо arg0 поля, он должен ссылаться из InputFields.java. Не могли бы вы помочь в этом.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bus="http://business.kp.org/">
<soapenv:Header/>
<soapenv:Body>
<bus:addEBMFields>
<!--Optional:-->
<arg0>
<FieldName>?</FieldName>
<!--1 or more repetitions:-->
<Oli>?</Oli>
<Oli>?</Oli>
<Oli>?</Oli>
</arg0>
</bus:addEBMFields>
</soapenv:Body>
</soapenv:Envelope>
А также я хотел бы т
o know how my JAXB class should for the following soap request xml
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bus="http://business.kp.org/">
<soapenv:Header/>
<soapenv:Body>
<bus:addEBMFields>
<!--Optional:-->
<FieldName>?</FieldName>
<!--1 or more repetitions:-->
<Oli>?</Oli>
<Oli>?</Oli>
<Oli>?</Oli>
</bus:addEBMFields>
</soapenv:Body>
</soapenv:Envelope>