2012-01-23 42 views
0

我正在使用Eclipse IDE生成Java服務的Web服務,該服務有一個類,其中包含通過Hibernate映射的DAO查詢數據庫的方法。如果我在不使用所有Hibernate類型(作爲傳遞給方法或返回類型的參數)的情況下創建Web服務,那麼它會成功,如果我嘗試使用所有Hibernate bean以使其映射失敗。任何人都面臨過這個問題?創建JAX-WS Web服務時未映射Hibernate對象

問題是我沒有在Web服務中映射的所有Hibernate對象。當我需要使用服務的客戶端使用它們時,它們當然不會有一些不明確的地方。

任何人都遇到過這個問題?

謝謝,我感謝所有幫助...

+0

你能澄清第二和第三句,或添加一個代碼段的TimestampAdapter類解決來說明你的意思嗎? –

+0

它如何失敗?它是否會拋出異常?如果是的話你可以提供堆棧跟蹤?它是否映射了錯誤的類?你是否缺少屬性?你有繼承嗎? – Pace

+0

感謝您的intrest幫助, – mzereba

回答

0

問題通過加入@XmlJavaTypeAdapter(TimestampAdapter.class) BUT通過創建具有其返回的java.util.Date代替java.sql.Date

0

在我的例子中第一種方法「mapVM」之類的下方返回一組「VmStatistics」的使faliure如下:

An internal error occurred during: "Generating JAX-WS Web Services". 
Unable to create JAXBContext 

而如果我關閉Hibernate對象的方法,'wmStatistics'不會在創建ws時映射。和其他對象一樣,所以我在ws中丟失了bean。

休眠邏輯位於jar文件中幷包含6個bean。

這是我的類來生成WS的(包含5種方法)

public class DBHelper { 

    public DBHelper(){} 

      public static Set<VmStatistics> mapVM(Vm vm){ 

     Set< VmStatistics> s = vm.getVmStatisticses(); 
     return s; 
    } 



    /** 
    * Loads all companies 
    * 
    * @return A list of company objects 
    */ 
    public static ArrayList<Company> getCompanyList(){ 
     ArrayList<Company> lCompanies = new ArrayList<Company>(); 

        ... 

        return lCompanies; 
    } 

    /** 
    * Loads all the available countries 
    * 
    * @return 
    * Returns a list of string objects 
    */ 
    public static ArrayList<String> getCountryList(){ 
     ArrayList<String> lCountires = new ArrayList<String>(); 

     ...  

        return lCountires; 
    } 

    /** 
    * Loads the companies of the given country name 
    * 
    * @param pCountry a given country name 
    * 
    * @return A list of company objects 
    */ 
    public static ArrayList<Company> getCompanyListByCountry(String pCountry){ 
     ArrayList<Company> lCompanies = new ArrayList<Company>(); 

        ... 
        return lCompanies; 
    } 

    /** 
    * Loads the latest reading performed in the datacenter 
    * 
    * @param pCountry 
    * A given country name 
    * 
    * @param pCompany 
    * A given company object 
    * 
    * @return The list of server objects which contains the associated VMs and the relative statistics 
    */ 
    public static Collection<Server> getCurrentReading(String pCountry, Company pCompany){ 
       ... 
       return lServer; 
    } 

} 

現在我試圖手動添加豆類的WS的模式文件和WSDL,它接受它,但在部署到Tomcat階段它給出了相同的錯誤,但由於它是一個日誌錯誤,而不是一個月食,我認爲這是更清楚明白:

我試圖通過修改sdl和模式文件,並添加不獲取類型映射......並在部署在Tomcat的臉上,它給出了相同的錯誤...也許這將更清楚sicne它是一個日誌錯誤:

SEVERE: WSSERVLET11: failed to parse runtime descriptor: javax.xml.ws.WebServiceException: Unable to create JAXBContext 
javax.xml.ws.WebServiceException: Unable to create JAXBContext 
    at com.sun.xml.ws.model.AbstractSEIModelImpl.createJAXBContext(AbstractSEIModelImpl.java:158) 
    at com.sun.xml.ws.model.AbstractSEIModelImpl.postProcess(AbstractSEIModelImpl.java:87) 
    at com.sun.xml.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:262) 
    at com.sun.xml.ws.server.EndpointFactory.createSEIModel(EndpointFactory.java:322) 
    at com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:188) 
    at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:467) 
    at com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parseAdapters(DeploymentDescriptorParser.java:253) 
    at com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parse(DeploymentDescriptorParser.java:147) 
    at com.sun.xml.ws.transport.http.servlet.WSServletContextListener.contextInitialized(WSServletContextListener.java:108) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525) 
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:830) 
    at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:719) 
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490) 
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149) 
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) 
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) 
    at org.apache.catalina.core.StandardService.start(StandardService.java:516) 
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:578) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) 
Caused by: java.security.PrivilegedActionException: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions 
java.sql.Timestamp does not have a no-arg default constructor. 
    this problem is related to the following location: 
     at java.sql.Timestamp 
     at public java.sql.Timestamp org.qcri.power.db.AbstractServerStatistics.getTimestamp() 
     at org.qcri.power.db.AbstractServerStatistics 
     at org.qcri.power.db.ServerStatistics 
     at private java.util.Set org.qcri.power.ws.jaxws.MapServerResponse._return 
     at org.qcri.power.ws.jaxws.MapServerResponse 

    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.xml.ws.model.AbstractSEIModelImpl.createJAXBContext(AbstractSEIModelImpl.java:148) 
    ... 32 more 

謝謝

+0

我做了一些進步,現在問題是時間戳錯誤。在論壇上有兩種解決方法: 1.通過註釋將字段設置爲XmlJavaTypeAdapter:使用註釋標識符不起作用,並給出相同的錯誤。 2.將該字段設置爲不公開:通過將其設爲私有,它可以正常生成ws,但是一旦在客戶端使用該對象,該字段始終爲空。 任何想法請問? – mzereba

+0

在通過註釋引用的類中,我將java.sql.Date更改爲java.util.Date。這固定了它。 – mzereba