URL-Mapping mit Stateless Beans

Dieses Thema URL-Mapping mit Stateless Beans im Forum "Web Tier" wurde erstellt von Goldfish, 6. Juli 2015.

Thema: URL-Mapping mit Stateless Beans Hi, ich habe gerade das Problem, dass ich nicht herausfinde, wie ich meien Stateless Beans ordentlich auf URLs...

  1. Hi, ich habe gerade das Problem, dass ich nicht herausfinde, wie ich meien Stateless Beans ordentlich auf URLs mappe. Wenn ich eine simple Anwendung mit nur einer Stateless-Bean deploye, läuft alles wunderbar. Jetzt hab ich aber das Problem, dass ich bspw. eine Anwendung mit JSF habe und das Mapping in der web.xml wie folgt angegeben habe:

    Code (Text):

    <servlet>
            <servlet-name>Faces Servlet</servlet-name>
            <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>*.xhtml</url-pattern>
        </servlet-mapping>
        <welcome-file-list>
            <welcome-file>index.xhtml</welcome-file>
        </welcome-file-list>

        <context-param>
            <param-name>javax.faces.PROJECT_STAGE</param-name>
            <param-value>Development</param-value>
        </context-param>
     
    Anschließend ist das Ergebnis, dass die URLs mit den Stateless Beans nicht mehr mappen und ich diese nicht mehr erreichen kann. Ich habe keine explizite Anweisung in der web.xml, da ich nicht rausfinde, wie diese aussehen müssten. Die Bean sieht gerade so aus:

    Code (Text):

    @Stateless
    @Path(value = "test")
    public class TestRessource {

        @GET
        @Path("call")
        @Produces({MediaType.APPLICATION_JSON, "text/plain"})
        public Object ladeSchhluessel () throws Exception {
            return "das ist ein test";
        }
    }
     
    Das gleiche Problem habe ich, wenn ich statt des JSF-Mappings noch einen Web-Service basierend auf JAX-WS einbinde. Die Stateless-Beans erreiche ich einfach nicht mehr. Wie muss ich die web.xml richtig konfigurieren? Oder wo gibt es eine vernünftige Anleitung bzw. Erklärung zu diesem Thema?
     
    Zuletzt bearbeitet: 6. Juli 2015
  2. Vielleicht hilft dir das Grundlagen Training weiter --> *Klick*
  3. stg
    stg
    Du kannst keine Stateless Bean direkt mappen, alle Anfragen laufen zunächst an ein Servlet. An welches wird in der web.xml definiert. Dass es in deinem ersten geschilderten Fall überhaupt funktioniert, liegt vermutlich daran, dass der Application Server trotz des fehlenden Eintrags das richtige finden konnte. Spätestens zu dem Zeitpunkt, als du weitere Mappings hinzugefügt hast, war er dann aber damit überfordert.

    Bei mir sieht das Mapping so aus:
    Code (Text):

      <servlet>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <url-pattern>/ws/*</url-pattern>
      </servlet-mapping>
     
    Der Webservice aus deiner Stateless Bean wäre dann über
    Code (Text):
    ../ws/test/call
    erreichbar.
     
    Zuletzt bearbeitet: 6. Juli 2015
  4. sauber danke, jetzt läuft alles :)
    ich wusste einfach nicht, wie der Eintrag in der web.xml aussehen musste :)
     
  5. ich muss das Thema leider noch einmal erneut aufrollen. Ich bin auf ein neues Problem gestoßen, dass sich mit diesem hier nahezu deckt.

    Nachdem das Rumspielen vorhin funktioniert hat, bin ich eben auf die richtige Anwendung gegangen, wo der Kram am Ende laufen soll, wo das Mapping wieder nicht funktioniert. Ich habe auf dem Server 2 WebServices laufen und den Eintrag für die EJBs in die web.xml hinzugefügt. Aber aus irgendeinem Grund mapped die URL nicht. Das Servlet scheint erreicht zu werden, aber es kann wohl die Ressource nicht auflösen und ich kann mir nicht erklären wieso.

    Code (Text):

    <!-- Für JBoss, damit nicht nach mehreren RS Implementierungen gesucht wird. -->
        <context-param>
            <param-name>resteasy.scan</param-name>
            <param-value>false</param-value>
        </context-param>
        <context-param>
            <param-name>resteasy.scan.providers</param-name>
            <param-value>false</param-value>
        </context-param>
        <context-param>
            <param-name>resteasy.scan.resources</param-name>
            <param-value>false</param-value>
        </context-param>


        <listener>
            <listener-class>
                com.sun.xml.ws.transport.http.servlet.WSServletContextListener
            </listener-class>
        </listener>
        <servlet>
            <servlet-name>FiverxLinkSecurityServiceServlet</servlet-name>
            <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet>
            <servlet-name>FiverxLinkServiceServlet</servlet-name>
            <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>

        <servlet-mapping>
            <servlet-name>FiverxLinkSecurityServiceServlet</servlet-name>
            <url-pattern>/FiverxLinkSecurityService</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>FiverxLinkServiceServlet</servlet-name>
            <url-pattern>/FiverxLinkServiceService</url-pattern>
        </servlet-mapping>
        <session-config>
            <session-timeout>120</session-timeout>
        </session-config>


        <servlet>
            <servlet-name>javax.ws.rs.core.Application</servlet-name>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>javax.ws.rs.core.Application</servlet-name>
            <url-pattern>app/*</url-pattern>
        </servlet-mapping>
     
    Die Bean ist die gleiche wie eben gerade. Aber ich erhalte nun immer die Exception:

    Code (Text):

    13:01:16,661 WARN  [org.jboss.resteasy.core.ExceptionHandler] (default task-27) failed to execute: javax.ws.rs.NotFoundException: Could not find resource for full path: http://localhost:8080/FiverxLinkTest-0.0.0-SNAPSHOT/app/test/call
        at org.jboss.resteasy.core.registry.ClassNode.match(ClassNode.java:73) [resteasy-jaxrs-3.0.10.Final.jar:]
        at org.jboss.resteasy.core.registry.RootClassNode.match(RootClassNode.java:48) [resteasy-jaxrs-3.0.10.Final.jar:]
        at org.jboss.resteasy.core.ResourceMethodRegistry.getResourceInvoker(ResourceMethodRegistry.java:444) [resteasy-jaxrs-3.0.10.Final.jar:]
        at org.jboss.resteasy.core.SynchronousDispatcher.getInvoker(SynchronousDispatcher.java:234) [resteasy-jaxrs-3.0.10.Final.jar:]
        at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:171) [resteasy-jaxrs-3.0.10.Final.jar:]
        at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:220) [resteasy-jaxrs-3.0.10.Final.jar:]
        at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56) [resteasy-jaxrs-3.0.10.Final.jar:]
        at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51) [resteasy-jaxrs-3.0.10.Final.jar:]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [jboss-servlet-api_3.1_spec-1.0.0.Final.jar:1.0.0.Final]
        at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:63) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
        at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:261) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:247) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:76) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:166) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.server.Connectors.executeRootHandler(Connectors.java:197) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:759) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_75]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_75]
        at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_75]
     
     
  6. Kostenloses Java-Grundlagen Training im Wert von 39 €
    Schau dir jetzt hier das Tutorial an und starte richtig durch!