2017-03-20 1 views
0

Ich arbeite an dem Erstellen von spring webservices für eine Anwendung. Ich benutze Apache CXF zum Erstellen von Webservices und Maven für den Aufbau des Krieges. Ich verwende Weblogic 12c, um den Webservice auf meinem PC zu installieren. Ich verwende "org.codehaus.jackson.jaxrs.JacksonJsonProvider" als jsonProvider. Der Code wird auf dem laufenden Server ohne Fehler bereitgestellt. Aber wenn ich versuche, den gleichen Code in der Client-Maschine zu implementieren, die WebLogic hat 12.2.1 die Bereitstellung schlägt mit dem folgenden Fehler:Spring Webservices, die Apache CXF verwenden, werden nicht auf dem Clientserver bereitgestellt (weblogic)

"Jersey" failed to preload on startup in Web application: "broker-ws.war".

<[ACTIVE] ExecuteThread: '12' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1490020025257> <BEA-101216> <Servlet: "Jersey" failed to preload on startup in Web application: "broker-ws.war". 
    at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170) 
    at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136) 
    at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:795) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:790) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:491) 
    at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:321) 
    at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605) 
    at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:207) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:376) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:559) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:240) 
    at weblogic.jaxrs.server.portable.servlet.ServletContainer.init(ServletContainer.java:121) 
    at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:337) 
    at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:288) 
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 
    at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57) 
    at weblogic.servlet.internal.StubSecurityHelper.initServletInstance(StubSecurityHelper.java:98) 
    at weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:86) 
    at weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:71) 
    at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:57) 
    at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:31) 
    at weblogic.servlet.internal.ServletStubImpl.initStubLifecycleHelper(ServletStubImpl.java:656) 
    at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:600) 
    at weblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppServletContext.java:1974) 
    at weblogic.servlet.internal.WebAppServletContext.loadServletsOnStartup(WebAppServletContext.java:1951) 
    at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1841) 
    at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:2871) 
    at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1661) 
    at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:823) 
    at weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:360) 
    at weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:356) 
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42) 
    at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:138) 
    at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124) 

ich ausdrücklich nicht bin Jersey Referenzierung überall in meinem Projekt, aber ich benutze jax-rs, die nach Jersey suchen. Der Weblogic-Server in meiner Maschine hatte Jersey-Gläser, aber die Weblogic, die in der Client-Maschine vorhanden war, hatte keine Jersey-Gläser. Ich habe versucht, die folgenden Gläser meiner pom.xml Zugabe:

<!-- https://mvnrepository.com/artifact/org.glassfish.jersey.bundles/jaxrs-ri --> 
    <dependency> 
      <groupId>org.glassfish.jersey.bundles</groupId> 
      <artifactId>jaxrs-ri</artifactId> 
      <version>2.25.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.hk2</groupId> 
      <artifactId>hk2-api</artifactId> 
      <version>2.5.0-b32</version> 
     </dependency> 

     <dependency> 
      <groupId>org.glassfish.hk2</groupId> 
      <artifactId>hk2-locator</artifactId> 
      <version>2.5.0-b32</version> 
     </dependency> 

     <dependency> 
      <groupId>org.glassfish.hk2</groupId> 
      <artifactId>hk2-utils</artifactId> 
      <version>2.5.0-b32</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.glassfish.hk2/hk2-inhabitant-generator --> 
     <dependency> 
      <groupId>org.glassfish.hk2</groupId> 
      <artifactId>hk2-inhabitant-generator</artifactId> 
      <version>2.5.0-b19</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/javax.inject/javax.inject --> 
     <!-- https://mvnrepository.com/artifact/org.apache.servicemix.bundles/org.apache.servicemix.bundles.javax-inject --> 
     <dependency> 
      <groupId>org.apache.servicemix.bundles</groupId> 
      <artifactId>org.apache.servicemix.bundles.javax-inject</artifactId> 
      <version>1_2</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-client --> 
     <dependency> 
      <groupId>org.glassfish.jersey.core</groupId> 
      <artifactId>jersey-client</artifactId> 
      <version>2.25.1</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.bundles.repackaged/jersey-guava --> 
     <dependency> 
      <groupId>org.glassfish.jersey.bundles.repackaged</groupId> 
      <artifactId>jersey-guava</artifactId> 
      <version>2.25</version> 
     </dependency> 

Doch vermag ich nicht ohne Fehler, die Anwendung zu implementieren. Ich bekomme jetzt einen anderen Fehler.

java.lang.IllegalStateException: No generator was provided and there is no default generator registered

Hier finden Sie meine Jax-Rs-Konfiguration in der Spring-Config-Datei.

<jaxrs:server id="restService" address="/rest"> 
     <jaxrs:serviceBeans> 
      <ref bean="userService" /> 
      <ref bean="billingService" /> 
     </jaxrs:serviceBeans> 
     <jaxrs:providers> 
      <ref bean='jsonProvider' /> 
     </jaxrs:providers> 
     <jaxrs:inInterceptors> 
      <bean class="com.brokerws.interceptor.WSLoggingRequestInterceptor" /> 
     </jaxrs:inInterceptors> 
     <jaxrs:outInterceptors> 
      <bean class="com.brokerws.interceptor.WSLoggingResponseInterceptor" /> 
     </jaxrs:outInterceptors> 
    </jaxrs:server> 

Hier finden Sie meine web.xml

<?xml version="1.0" encoding="ISO-8859-1"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    metadata-complete="true" version="3.0"> 
    <display-name>SuppApp</display-name> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/app-beans.xml</param-value> 
    </context-param> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <servlet> 
     <servlet-name>CXFServlet</servlet-name> 
     <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>CXFServlet</servlet-name> 
     <url-pattern>/services/*</url-pattern> 
    </servlet-mapping> 
    <servlet> 
     <servlet-name>health-check</servlet-name> 
     <servlet-class>com.suddenlink.util.HealthCheckServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>health-check</servlet-name> 
     <url-pattern>/healthCheck</url-pattern> 
    </servlet-mapping> 

    <filter> 
     <filter-name>Logback-MDC-Filter</filter-name> 
     <filter-class>com.suddenlink.traceability.filter.HttpHeaderServletFilter</filter-class> 
     <init-param> 
      <param-name>application_name</param-name> 
      <param-value>broker-ws</param-value> 
     </init-param> 
     <init-param> 
      <param-name>application_type</param-name> 
      <param-value>ws</param-value> 
     </init-param> 
    </filter> 
    <filter-mapping> 
     <filter-name>Logback-MDC-Filter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

</web-app> 

Kann mir jemand sagen, was ich über das Internet gegeben verschiedene Lösungen here.I versucht bin fehlt, aber für mich nichts funktionierte.

+0

Wo sind die CXF-Gläser enthalten? Kommen sie mit Weblogic? – yaswanth

+0

@yaswanth Ich habe sie in meine pom.xml aufgenommen, aber ich habe sie nicht in die prefer-application-packages-Konfiguration in weblogic.xml aufgenommen, daher kommen sie vom weblogic-Server – Venu

Antwort

0

Schließlich die Ursache für das Problem gefunden. Es war die Frühlings-Webapp-Version, die den Weblogic-Server nach Jersey-Abhängigkeit suchte. Ich habe die Webapp-Version von 3.0 auf 2.5 geändert und der Fehler ist weg. Ich hoffe, dies hilft jemandem, der auf dieses Problem stoßen wird, da es fast zwei Tage dauerte, um herauszufinden, was tatsächlich geschah.

Verwandte Themen