CXF- 報 兩個類具有相同的 XML 類型名稱 異常錯誤

zeroflying 13年前發布 | 11K 次閱讀 ?Dropbox

今天采用tomcat+CXF生成webservice時,遇到一個問題

</tr> </tbody> </table> </p>
代碼部分是這樣的

 Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
兩個類具有相同的 XML 類型名稱 "{http://www.paxdata.com/pboss/}createRoleResponse"。請使用 @XmlType.name 和 @XmlType.namespace 為類分配不同的名稱。
 this problem is related to the following location:
  at com.paxdata.pboss.upm.jws.bean.CreateRoleResponse
  at private com.paxdata.pboss.upm.jws.bean.CreateRoleResponse com.paxdata.pboss.upm.jws.jaxws_asm.CreateRoleResponse.createRoleReturn
  at com.paxdata.pboss.upm.jws.jaxws_asm.CreateRoleResponse
 this problem is related to the following location:
  at com.paxdata.pboss.upm.jws.jaxws_asm.CreateRoleResponse

</tr> </tbody> </table>
于是我仔細查看了原先在weblogic下正常生成的wsdl文件,和在tomcat中采用CXF生成的正常的WSDL文件,發現weblogic中對于WebResult中的name中的值 只是產生一個Response的引用。而在tomcat下則會生成一個createReturn的ComplexType
而jax_ws中會根據每一個方法名生成一個  methodname+"response"的類。于是問題就出現了
首先 jax_ws根據方法名生成一個createRoleResponse。   當tomcat下再次生成WebResult的類的時候 發現name的值為小寫,不符合java規范(這部分是猜測的,如果大家有正確的解釋,歡迎提供),于是就再生成一個createRoleResponse的類,這樣就沖突了。

解決方案: jax_ws根據方法名生成methodname+"Response"時,是根據operationName的,所以將operationName改為大寫后,則會避免生成兩個同樣的類。 但是這里建議的話,返回的類型最好不要采用Response結尾的,另外就是WebMethod和WebResult中的值最好大寫,符合規范。




 本文由用戶 zeroflying 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
寫博客

博客分類

推薦閱讀

CXF- 報 兩個類具有相同的 XML 類型名稱 異常錯誤

今天采用tomcat+CXF生成webservice時,遇到一個問題 Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsExcep...

操作XML的Java工具類

import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import...

子類繼承父類時,子類的異常不能大于父類

在java中,當我們子類要重寫父類中的方法,如果父類的方法有異常聲明,那么子類重寫這個方法時候,所要聲明的異常不應該比父類的大。只能是小等,或者可以沒有。原因如下。 假如我們自定意義一個異常: ...

一個簡易的PHP XML 操作類SmallXmlDOM

<?php class SmallXmlDOM { /** * @var DOMDocument */ private $_doc; /** * @var DOMElement */ priva...
    @WebMethod(action="createRole",operationName = "createRole")
   @WebResult(name = "createRoleReturn", targetNamespace = "http://www.paxdata.com/pboss/")  
  public CreateRoleResponse createRole(
          @WebParam(name = "BaseRequest", targetNamespace = "http://www.paxdata.com/pboss/")
          BaseRequest pubReq,
          @WebParam(name = "Role", targetNamespace = "http://www.paxdata.com/pboss/")
          RoleInf role) throws Exception
  • sesese色