2016-04-19 11 views
0

Ich habe diesen logischen Handler für einen Webdienst, den ich auf den Servlet-Kontext zugreifen muss (über den Web-Service-Kontext denke ich).Warum kann ich einen WebServiceContext nicht in einen logischen Jax-WS-Handler einfügen?

package test; 

public class NewLogicalHandler implements LogicalHandler<LogicalMessageContext> { 

    @Resource 
    private WebServiceContext context; 

Fehler, wenn ich bereit:

<Servlet: "test.ws1" failed to preload on startup in Web application: "web". 
java.lang.ClassNotFoundException: test.NewLogicalHandler 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 

Wenn ich in den Web-Service injizieren richtige:

@WebService(..stuff...) 
@HandlerChain(file = "handler.xml") 
public class ws1 { 

    @Resource 
    private WebServiceContext context;  

Das funktioniert gut.

+0

Die Klasse wurde nicht im Klassenpfad gefunden. Daher schlage ich vor, dass Sie sicherstellen müssen, dass sie sich zuerst im Klassenpfad befindet. – gigadot

+0

Es ist. Denn wenn ich @Resouce entferne, wird es in Ordnung gebracht und der Handler kann aufgerufen werden. Ich denke, dass es eine Reihenfolge des Ladenproblems sein kann? – OldProgrammer

+0

'ClassNotFoundException' tritt auf, wenn eine Klasse vom Klassenladeprogramm nicht unter Klassenpfad gefunden wird. In diesem Fall wird' test.NewLogicalHandler' nicht gefunden. Dies geschieht normalerweise, wenn Sie eine War-Anwendung erstellen, die Abhängigkeit jedoch nicht in der WAR-Datei enthalten ist. Oder Sie verwenden einen Klassenlader, der 'test.NewLogicalHandler' in einigen Ihrer jar-Dateien unter ClassParth nicht findet. Ich kann mir keinen anderen Grund vorstellen. – gigadot

Antwort

0

Macht nichts. Kann den Servlet-Kontext von LogicalMessageContext.get abrufen (MessageContext.SERVLET_CONTEXT);