【问题标题】:Injecting logger, weld注射记录仪,焊接
【发布时间】:2011-02-16 21:50:36
【问题描述】:

我正在尝试通过一些注入来替换标准记录器初始化

1-st。

我试图在无状态 bean/webservices 中使用焊接 weld logging

@Stateless
@WebService
public class EchoSSL {

    @Inject
    private Logger log;


    public EchoSSL() {
    }

    public String echo(String msg) {
        log.debug("Log test");
        return "Echoing: " + msg;
    }
}

但它对我不起作用..我得到 java.lang.reflect.InvocationTargetException

javax.servlet.ServletException: java.lang.reflect.InvocationTargetException 在 org.glassfish.webservices.monitoring.WebServiceTesterServlet.doPost(WebServiceTesterServlet.java:326) 在 org.glassfish.webservices.monitoring.WebServiceTesterServlet.invoke(WebServiceTesterServlet.java:102) 在 org.glassfish.webservices.EjbWebServiceServlet.service(EjbWebServiceServlet.java:110) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 在 com.sun.grizzly.http.servlet.FilterChainImpl.doFilter(FilterChainImpl.java:195) 在 com.sun.grizzly.http.servlet.FilterChainImpl.invokeFilterChain(FilterChainImpl.java:139) 在 com.sun.grizzly.http.servlet.ServletAdapter.doService(ServletAdapter.java:376) 在 com.sun.grizzly.http.servlet.ServletAdapter.service(ServletAdapter.java:329) 在 com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:166) 在 com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:100) 在 com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:245) 在 com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791) 在 com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693) 在 com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954) 在 com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170) 在 com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135) 在 com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102) 在 com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88) 在 com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76) 在 com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53) 在 com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57) 在 com.sun.grizzly.ContextTask.run(ContextTask.java:69) 在 com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330) 在 com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309) 在 java.lang.Thread.run(Thread.java:619) 造成的: java.lang.reflect.InvocationTargetException 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native 方法)在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.glassfish.webservices.monitoring.WebServiceTesterServlet.doPost(WebServiceTesterServlet.java:297) ... 24 更多原因: javax.xml.ws.soap.SOAPFaultException: javax.ejb.EJBException 在 com.sun.xml.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:189) 在 com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:130) 在 com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:119) 在 com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:89) 在 com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:140) 在 $Proxy484.sayHello(未知来源) ... 29 更多原因: javax.ejb.EJBException 在 com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5070) 在 com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:4968) 在 com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4756) 在 com.sun.ejb.containers.WebServiceInvocationHandler.invoke(WebServiceInvocationHandler.java:200) 在 $Proxy464.sayHello(未知来源) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native 方法)在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.glassfish.webservices.InvokerImpl.invoke(InvokerImpl.java:78) 在 org.glassfish.webservices.EjbInvokerImpl.invoke(EjbInvokerImpl.java:78) 在 com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:146) 在 com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:257) 在 com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:95) 在 com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629) 在 com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588) 在 com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573) 在 com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470) 在 com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:112) 在 org.glassfish.webservices.MonitoringPipe.process(MonitoringPipe.java:138) 在 com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115) 在 com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629) 在 com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588) 在 com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573) 在 com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470) 在 com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:112) 在 com.sun.xml.ws.tx.service.TxServerPipe.process(TxServerPipe.java:306) 在 com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115) 在 com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629) 在 com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588) 在 com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573) 在 com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470) 在 com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:112) 在 com.sun.enterprise.security.webservices.CommonServerSecurityPipe.processRequest(CommonServerSecurityPipe.java:195) 在 com.sun.enterprise.security.webservices.CommonServerSecurityPipe.process(CommonServerSecurityPipe.java:127) 在 com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115) 在 com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629) 在 com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588) 在 com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573) 在 com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470) 在 com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:295) 在 com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:519) 在 com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:288) 在 com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:143) 在 org.glassfish.webservices.Ejb3MessageDispatcher.handlePost(Ejb3MessageDispatcher.java:116) 在 org.glassfish.webservices.Ejb3MessageDispatcher.invoke(Ejb3MessageDispatcher.java:87) 在 org.glassfish.webservices.EjbWebServiceServlet.dispatchToEjbEndpoint(EjbWebServiceServlet.java:196) 在 org.glassfish.webservices.EjbWebServiceServlet.service(EjbWebServiceServlet.java:127) ... 22 更多原因: java.lang.NullPointerException 在 ua.eset.inferno.heresy.ws.security.Hello.sayHello(Hello.java:33) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native 方法)在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1056) 在 org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1128) 在 com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5243) 在 com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:615) 在 com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797) 在 com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:567) 在 com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:157) 在 com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:139) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native 方法)在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:858) 在 com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797) 在 com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:367) 在 com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5215) 在 com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5203) 在 com.sun.ejb.containers.WebServiceInvocationHandler.invoke(WebServiceInvocationHandler.java:188) ... 66 更多

错过了什么?

第二次

比我试试这个引用这个的tutorial - Custom Injections

但这也无济于事。

maven 依赖项 -

<dependencies>
        <dependency>
            <groupId>org.jboss.weld</groupId>
            <artifactId>weld-logger</artifactId>
            <version>1.0.0-CR2</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.weld</groupId>
            <artifactId>weld-extensions</artifactId>
            <version>1.0.0.Alpha1</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.weld</groupId>
            <artifactId>weld-api</artifactId>
            <version>1.0-CR2</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.weld</groupId>
            <artifactId>weld-core</artifactId>
            <version>1.0.1-CR2</version>
        </dependency>
    </dependencies>

Q1:ejb/web services中weld Logger注入的规则是什么?

Q2:会不会是 wsdl/EJB/WebService 的问题?

【问题讨论】:

  • 给出整个异常(+stacktrace)!
  • 已添加.. 我只是无法注入它(

标签: web-services ejb-3.0 cdi jboss-weld


【解决方案1】:

这是我的方法:

在 pom.xml 中添加以下依赖项:

<!-- SL4J API -->
 <dependency>
 <groupId>org.slf4j</groupId>
 <artifactId>slf4j-api</artifactId>
 <version>1.6.0</version>
 </dependency>

 <!-- SLF4J JDK14 Binding  -->
 <dependency>
 <groupId>org.slf4j</groupId>
 <artifactId>slf4j-jdk14</artifactId>
 <version>1.6.0</version>
 </dependency>

 <!-- Injectable Weld-Logger -->
 <dependency>
 <groupId>org.jboss.weld</groupId>
 <artifactId>weld-logger</artifactId>
 <version>1.0.0-CR2</version>
 </dependency>

注入 Logger 并照常使用:

import javax.inject.Inject;
import org.slf4j.Logger;

public class Example {
  @Inject
  private Logger logger;

  public void exampleFunc() {
    logger.info("Hello Logger!");
  }
}

如果你想使用 Log4J 而不是 SLF4J-JDK14 绑定,我找到了this page。我试过了,但我无法让它工作,所以我仍然坚持我自己的解决方案。

【讨论】:

    【解决方案2】:

    确保您的 bean 在 bean 存档中 - 即您有 META-INF/beans.xml

    除了焊接扩展,除非你给出整个例外,否则我无法帮助你,你可以创建一个生产者,@Produces a Logger

    【讨论】:

    • 我使用 mvn 依赖于 org.jboss.weldweld-logger1.0.0-CR2org.jboss.weldweld-extensions1.0.0.Alpha1org.jboss.weldweld-api 1.0-CR2org.jboss.weldweld-core1.0.1-CR2 别的?
    【解决方案3】:

    默认的 slf4j 记录器生产者在 Weld Extensions 中定义。如果您想在不包括所有 Weld Extensions 的情况下自行连接,您可以查看生产者是如何编写的 here

    【讨论】:

    • 我将该类复制到我的类路径中,但没有结果 - 同样的故事,同样的例外.. 看起来我想念整个想法.. 去阅读焊接规范和教程。
    【解决方案4】:

    在这种情况下,我没有将 bean.xml 放在 META-INF 中。

    【讨论】:

      猜你喜欢
      • 2016-04-23
      • 2013-06-27
      • 1970-01-01
      • 2011-09-08
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多