2012-11-16 36 views
-1

我們正在使用CXF Web服務。調用Web服務之後 - 爲某個屬性獲取空值

場景:

一個服務調用returing List<NoteDTO>。 Data was there NoteDTO但是在調用正在返回列表 的Web服務方法之後,我們在NoteDTO類中看到空值。

在日誌中也沒有任何種類的異常。

我的理解是在Webservices中存在轉換問題。

public class NoteDTO { 


    /** The text of the note. */ 
    private String text; 

    /** The date the note was created. */ 
    private Date created; 

    /** The user who created the note. */ 
    private UserDTO createdBy; 

    /** The date the note was last modified. */ 
    private Date modified; 

    /** The last user to modify the note. */ 
    private UserDTO modifiedBy; 


    private String wfStep; 

    public void setWfStep(String wfStep) { 
     this.wfStep = wfStep; 
    } 

    /** 
    * Default constructor for JAXB. 
    */ 
    public NoteDTO() { 
    } 

    /** 
    * Constructor taking basic values. 
    * @param text The text of the note. 
    * @param created The date created. 
    * @param createdBy The user who create the note. 
    */ 
    public NoteDTO(String text, Date created, UserDTO createdBy) { 
     this.text = text; 
     this.created = created; 
     this.createdBy = createdBy;  
    } 

    /** 
    * Getter for the text of the note. 
    * @return The text of the note. 
    */ 
    public String getText() { 
     return text; 
    } 

    /** 
    * Setter for the text of the note. 
    * @param text The text of the note. 
    */ 
    public void setText(String text) { 
     this.text = text; 
    } 

    /** 
    * Getter for the created date. 
    * @return The created date. 
    */ 
    public Date getCreated() { 
     return created; 
    } 

    /** 
    * Setter for the created date. 
    * @param created The create date. 
    */ 
    public void setCreated(Date created) { 
     this.created = created; 
    } 

    /** 
    * Getter for the modified date. 
    * @return The modified date. 
    */ 
    public Date getModified() { 
     return modified; 
    } 

    /** 
    * Setter for the modified date. 
    * @param modified The modified date. 
    */ 
    public void setModified(Date modified) { 
     this.modified = modified; 
    } 

    /** 
    * Getter for the created by user. 
    * @return The created by user. 
    */ 
    public UserDTO getCreatedBy() { 
     return createdBy; 
    } 

    /** 
    * Setter for the created by user. 
    * @param createdBy The created by user. 
    */ 
    public void setCreatedBy(UserDTO createdBy) { 
     this.createdBy = createdBy; 
    } 

    /** 
    * Getter for the modified by user. 
    * @return The modified by user. 
    */ 
    public UserDTO getModifiedBy() { 
     return modifiedBy; 
    } 

    /** 
    * Setter for the modified by user. 
    * @param modifiedBy The modified by user. 
    */ 
    public void setModifiedBy(UserDTO modifiedBy) { 
     this.modifiedBy = modifiedBy; 
    } 

    /** 
    * Getter for the workflow step. 
    * @return The workflow step. 
    */ 
    public String getWfstep() { 
     return this.wfStep; 
    } 

我有一個Web服務類

@WebService 
public interface NotesService { 

    /** 
    * Get server notes for a specific workflow instance 
    * @param workflowInstanceEntitityId Workflow Instance Entity ID 
    * @return A list of notes. 
    */ 
    List<NoteDTO> getNotesForWorkflowInstance(String bundleName, String workflowInstanceName); 
} 

的數據在那裏,在另一側NoteDTO但通話後像下面

notes = notesService.getNotesForWorkflowInstance(bundleName, workflowInstanceName); 

我越來越wfStep屬性值空

有什麼想法?

thansk提前。

+1

某種代碼會幫助... – Nathan

+0

請提供一些代碼。 – legendofawesomeness

+0

什麼是'NoteDTO'? –

回答

0

可能是@WebMethod註釋會有幫助嗎?

0

您的類沒有適當的註釋,因此我假設您使用的是Java-First方法。

我確定您的NoteDTO不是WSDL類型的XSD模式。如果您使用CXF從Java代碼生成WSDL您需要做的是在Web服務的對象上添加適當的註釋。所以,你的NoteDTO類應該是這樣的:

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "NoteDTO", propOrder = { 
    "text", 
    "created", 
    "createdBy", 
    "modified", 
    "modifiedBy", 
    "wfStep" 
}) 
public class NoteDTO { 

    @XmlElement(name = "text") 
    private String text; 

    @XmlElement(name = "created") 
    private Date created; 

    @XmlElement(name = "createdBy") 
    private UserDTO createdBy; 

    @XmlElement(name = "modified") 
    private Date modified; 

    @XmlElement(name = "modifiedBy") 
    private UserDTO modifiedBy; 

    @XmlElement(name = "wfStep") 
    private String wfStep; 

} 

UserDTO相同,在Web服務調用中使用的任何其他對象。然後你的界面應該看起來像這樣:

@WebService(targetNamespace = "http://your.target.namespace/", name = "NotesService") 
@XmlSeeAlso({ObjectFactory.class}) 
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE) 
public interface NotesService { 

    @WebResult(name = "getNotesForWorkflowInstanceResponse", targetNamespace = "http://your.target.namespace/") 
    @WebMethod(operationName = "getNotesForWorkflowInstance", action = "http://your.target.namespace/getNotesForWorkflowInstance") 
    public List<NoteDTO> getNotesForWorkflowInstance(
     @WebParam(name = "bundleName", targetNamespace = "http://your.target.namespace/") String bundleName, 
     @WebParam(name = "workflowInstanceName", targetNamespace = "http://your.target.namespace/") String workflowInstanceName   
    ); 

} 

未測試,只需手工添加所有內容。閱讀關於Java-First方法的更多信息,你會發現你做錯了什麼。這只是一個啓動的提示。

相關問題