2013-05-10 2 views
1

Я новичок в 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> 

ответ

1

Добавить:

@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE) 

к интерфейсу EBMData. По умолчанию он создаст обертки для операций. Указание режима BARE будет использовать типы напрямую.