關於wsdl生成客戶端代碼中的JAXBElement


原文地址:https://blog.csdn.net/z69183787/article/details/53505941?utm_source=blogxgwz5

1、使用自動生成的java文件中的 ObjectFactory構造入參

關於cxf生成客戶端代碼中的JAXBElement<String>
    在使用cxf或者x-fire進行webservice開發時,從wsdl文件生成客戶端代碼時,如果有屬性的類型是String,可能會出現JAXBElement<String>類型。
    為什么webservice客戶端不直接使用String,而使用JAXBElement<String>類型,自然是有原因的,是因為服務器端的wsdl文件有nillable="true"這個屬性。
   此時有兩種方法對這個JAXBElement<String>類型賦值。
   1.

  1.  
    User user = new User();
  2.  
    JAXBElement<String> name = new JAXBElement<String>(new QName("http://memberService", "username"), String.class, "smallnest");
  3.  
    user.setUsername(name);


使用這種方法時,有很多人發現客戶端的數據確實存入了,可是到了服務器端,通過.getUsername().getValue()調用時,卻是null,原因就是Qname值不對!注意,在生成的客戶端代碼里有private static final QName SERVICE_NAME = new QName("xxx","xx");
並不是這個QName,真正的Qname要去ObjectFactory.java文件去找。只要QName寫對,這種調用方法是可以的。
   2.當然,還有一種更簡單的方法,直接使用ObjectFactory這個類來調用:

  1.  
    User user = new User();
  2.  
    ObjectFactory objFac= new ObjectFactory();
  3.  
    JAXBElement<String> name = objFac.createUserUsername( "smallnest");
  4.  
    user.setUsername(name);


這樣就簡便多了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM