Hibernate объекты не отображаются при создании веб-службы JAX-WS - PullRequest
0 голосов
/ 23 января 2012

Я создаю веб-сервис на Java с Eclipse IDE, у которого есть класс с методами, которые запрашивают базу данных через сопоставленные DAOs Hibernate. Если я создаю веб-сервис без использования всех типов Hibernate (в качестве параметра, передаваемого в методы или возвращаемый тип), это произойдет успешно. Если я попытаюсь использовать все мои bean-компоненты Hibernate для их отображения, произойдет сбой. кто-нибудь сталкивался с этой проблемой раньше?

Проблема в том, что у меня не все объекты Hibernate сопоставлены в веб-сервисе. конечно, не имея некоторых, они недоопределены, когда мне нужно использовать их от клиента, который использует сервис.

Кто-нибудь сталкивался с этой проблемой?

Спасибо, я ценю любую помощь ...

Ответы [ 2 ]

0 голосов
/ 25 января 2012

Проблема решена путем добавления @XmlJavaTypeAdapter( TimestampAdapter.class) НО путем создания класса TimestampAdapter, в котором он возвращает java.util.Date вместо java.sql.Date

0 голосов
/ 24 января 2012

В моем примере первый метод 'mapVM' из приведенного ниже класса возвращает набор 'VmStatistics', вызывающий ошибку следующим образом:

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

Хотя, если я отключу метод, объект Hibernate 'VmStatistics' не будет отображен при создании ws. То же самое происходит с другими объектами, поэтому мне не хватает бобов в WS.

Логика гибернации находится в файле jar и содержит 6 компонентов.

Это мой класс для генерации 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;
    }

}

Теперь я попытался добавить bean-компоненты вручную в файл схемы и wsdl из ws, и он принимает их, но при развертывании на этапе tomcat выдает ту же ошибку, но, поскольку это ошибка журнала, а не затмение, я думаю, что это Понятнее понять:

Я попытался сгенерировать вручную, изменив файлы sdl и schema и добавив типы, которые не отображаются ... и при развертывании на tomcat face выдает ту же ошибку ... возможно, это будет более понятно, так как это ошибка журнала:

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

Спасибо,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...