-
04-10-2019 - |
質問
私は標準のロガーの初期化を何らかの注入によって置き換えようとしています
1-st。
溶接を使用しようとしていました 溶接ロギング ステートレスビーン/ウェブサービスで
@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.refllect.invocationtargetexception at org.glassfish.webservices.monitoring.webservicetesterservlet.dopost(webservicetesterervlet.java:326) )org.glassfish.webservices.ejbwebserviceservlet.service(ejbwebserviceservlet.java:110)at javax.servlet.httpservlet.service(httpservlet.java:847) filterchainimpl.java:195)atcom.sun.grizzly.http.servlet.filterchainimpl.invokefilterchain(filterchainimpl.java:139)at com.sun.grizzly.http.servlet.servletadapter.doservice(combletadapter.java:376) .sun.grizzly.http.servlet.servletadapter.service(servletadapter.java:329)at com.sun.grizzly.tcp.http11.grizzlyadapter.service(grizzlyadapter.java:166) .hk2dispatcher.dispath(hk2dispatcher.java:100)at com.sun.enterprise.v3.services.impl.containermapper.service(conta inermapper.java:245)at com.sun.grizzly.http.processortask.invokeadapter(processortask.java:791)com.sun.grizzly.http.processortask.doprocess(processortask.java:693) .http.processortask.process(processortask.java:954)at com.sun.grizzly.http.defaultprotocolfilter.execute(defaultprotocolfilter.java:170)at com.sun.sun.grizzly.grizzly.defaultprotocolchain.exexeprotocolcher(edexecuteprotocolfter(145protocolfter) com.sun.grizzly.defaultprotocolchain.execute(defaultprotocolchain.java:102)のcom.sun.grizzly.defaultprotocolchain.execute(defaultprotocolchain.java:88)at com.sun.grizzly.http.httptprotocolchain(htpprotocolchain)akppprotocolchain execute 76)com.sun.grizzly.protocolchaincontexttask.docall(protocolchaincontexttask.java:53)at com.sun.grizzly.selectionkeycontextttask.call(selectionkeycontextttask.java:57) :69)com.sun.grizzly.util.util.abstractthreadpool $ worker.dowork(abstractthreadpool.java:330)at com.sun.grizzly.util.abstractthreadpo ol $ worker.run(abstractthreadpool.java:309)at java.lang.thread.run(thread.java:619)に原因:java.lang.lang.lang.reft.invocationTargetException at sun.reflt.nativemethodaccessorimpl.invoke0(在来方法) sun.refllect.nativemethodacsessimpl.invoke(nativemethodaccessorimpl.java:39)at sun.refllect.delegatingmethodaccessorimpl.invoke(Delegatingmethodaccessorimpl.java:25)at java.lang.reflect.method.Invake(Method.Invake( .webservices.monitoring.webservicetesterservlet.dopost(webservicetesterservlet.java:297)... 24さらに原因:javax.xml.ws.soap.soapfaultexception:javax.ejb.ejbexception com.sun.xml.ws.fault.fault.fault.fault.fault.fault. .getProtoColexception(soap11fault.java:189)at com.sun.xml.wault.soapfaultbuilder.createexception(soapfaultbuilder.java:130)at com.sun.xml.ws.client.sein.synvake(sycmethhandler.invake( :119)com.sun.xml.ws.client.sei.syncmethodhandler.invoke(syncmethodhandler.java:89)at com.sun.xml.ws.client.sei.seistub.invoke(seistub.java:1400) $ proxy484.sayhello(不明な情報源)... 29詳細:javax.ejb.ejbexception at com.sun.ejb.containers.baseconsystemexception(basecontainer.java:5070)at com.sun.ejb.containers。 basecontainer.completenewtx(basecontainer.java:4968)com.sun.ejb.containers.basecontainer.postinvoketx(basecontainer.java:4756)at com.sun.ejb.ejb.containers.webservoceinvococehnvoke(webservococehnvoke)at com.sun.ejb.containers. proxy464.sayhello(未知のソース)sun.reflt.nativemethodaccessorimpl.invoke0(ネイティブ方法)sun.reflect.nativemethodacsessorimpl.invoke(nativemethodaccessorimpl.java:39) java.lang.reflt.method.invoke(method.java:597)at org.glassfish.webservices.invokerimpl.invoke(invokerimpl.java:78)at org.glassfish.webservices.ejbinvokerimpl.invoke(ejbinimpl.javapl.javapl.javapl.javapl.javapl.javap com.sun.xml.ws.server.invokertube $ 2.invoke(invokertube.java:146)at com.sun.xml.ws.server.sei.endpoin tmethodhandler.invoke(endpointmethodhandler.java:257)at com.sun.xml.ws.server.sei.seiinvokertube.processrequest(seiinvokertube.java:95)at com.sun.xml.ws.api.pipe.fiber。 fiber.java:629)com.sun.xml.ws.api.pipe.fiber._dorun(fiber.java:588)at 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) atorg.glassfish.webservices.monitoringpipe.pipe.pipe.pipe.pipe.java:138)atcom.sun.xml.ws.api.pipe.helper.pipeadapter.processrequest(pipeadapter.java:115)at com.sun.xml.wswsws .api.pipe.fiber .__ dorun(fiber.java:629)com.sun.xml.ws.api.piper.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.abstracttubeimplp .process(abstracttubeimpl.java:112)at com.sun.xml.ws.tx.service.txserverpipe.process(txserverpipe.java:306) un.xml.ws.api.pipe.helper.pipeadapter.processrequest(pipeadapter.java:115)at com.sun.xml.ws.api.piber .__ dorun(fiber.java:629)at com.sun。 xml.ws.api.pipe.fiber._dorun(fiber.java:588)at com.sun.xml.ws.api.pipe.fiber.dorun(fiber.java:573)at com.sun.xml.ws. api.pipe.fiber.runsync(fiber.java:470)at com.sun.xml.ws.api.pipe.helper.abstracttubeimpl.process(abstracttubeimpl.java:112)at com.sun.enterprise.security.weerservices。 commonserversecuritypipe.processrequest(commonserversecuritypipe.java:195)at com.sun.enterprise.security.webservices.commonserversecuritypipe.process(commonserversecuritypipe.java:127) pipeadapter.java:115)at com.sun.xml.ws.api.pipe.fiber .__ dorun(fiber.java:629)at com.sun.xml.ws.api.pipe.fiber._dorun(fiber.java: 588)com.sun.xml.ws.api.pipe.fiber.dorun(fiber.java:573)at com.sun.xml.ws.api.pipe.fiber.runsync(fiber.java:470)でcom .sun.xml.ws.server.wsendpointimpl $ 2.process(wsendpointimpl.java:295)at com.sun.xml.ws.transport.http.httpadapter $ httptoolkit.handle(httpadapter.java:519)at com.sun.xml.ws.transport.http.httpadapter.handle(httpadapter.java:288)at com。 sun.xml.ws.transport.http.servlet.servletadapter.handle(servletadapter.java:143)at org.glassfish.webservices.ejb3messagedispatcher.handlepost(ejb3messagedispatcher.java:116) ejb3messagedispatcher.java:87)at org.glassfish.webservices.ejbwebserviceservlet.dispatchtoejbendpoint(ejbwebserviceservlet.java:196)at org.glassfish.webservices.ejbweervices.ejbweervice.servevice.servervice。 lang.nullpointerexception at ua.eset.inferno.heresy.ws.security.hello.sayhello(hello.java:33)at sun.reflect.nativemethodaccessorimpl.invoke0(ネイティブ方法) :39)sun.reflt.delegatingmethodaccessorimpl.invoke(DelegatingMethodaccessorImpl.java:25)at java.lang.reflt.metでhod.invoke(method.java:597)at org.glassfish.ejb.security.application.ejbsecuritymanager.runmethod(ejbsecuritymanager.java:1056)at org.glassfish.ejb.security.application 1128)com.sun.ejb.containers.basecontainer.invokebeanmethod(basecontainer.java:5243)at com.sun.ejb.ejbinvocation.invokebeanmethod(ejbinvocation.java:615) .invokenext(interceptormanager.java:797)com.sun.ejb.ejbinvocation.proceed.proceed(ejbinvocation.java:567)at com.sun.ejb.containers.interceptors.interceptors.stercectors.systeminterceptorproxy.doaround sun.ejb.containers.interceptors.systeminterceptorproxy.arondinvoke(SystemEnterceptorproxy.java:139)sun.reflect.nativemethodaccessorimpl.invoke0(native method)at sun.refllect.nativemethodacsessimpersimpl.Invakecsessimpl.Invakecsessimpl.ivemethoke Java.lang.R eflect.method.invoke(method.java:597)at com.sun.ejb.containers.interceptors.arundinvokeInterceptor.intercept(interceptormanager.java:858)at com.sun.ejb.containers.interceptors.aroundininvokechainimpl.invokenpl.invokenpl.invokenpl.invokenpl.incempl.invoken Java:797)atcom.sun.ejb.ejb.containers.interceptors.interceptormanager.intercept(interceptormanager.java:367)at com.sun.ejb.containers.basecontainer .__インターセプト(basecontainer.java:5215)com.sun.ejb .containers.basecontainer.intercept(basecontainer.java:5203)at com.sun.ejb.containers.webserviceinvocationhandler.invoke(webserviceinvocationhandler.java:188)... 66 more
何が見逃されていますか?
2-nd
私がこれを試してみるより チュートリアル それはこれを参照しています - カスタムインジェクション
しかし、それは助けにもなりません。
メイブン依存関係 -
<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サービスにおける溶接ロガーインジェクションのルールは何ですか?
Q2:WSDL/EJB/WebServiceの問題になる可能性がありますか?
解決
あなたの豆が豆のアーカイブにあることを確認してください - つまり、あなたが持っている META-INF/beans.xml
溶接延長とは別に、例外全体を与えない限り私はあなたを助けることができません、あなたはプロデューサーを作成することができます @Produces
a Logger
他のヒント
これが私のアプローチです:
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>
ロガーを注入して、いつものように使用してください。
import javax.inject.Inject;
import org.slf4j.Logger;
public class Example {
@Inject
private Logger logger;
public void exampleFunc() {
logger.info("Hello Logger!");
}
}
slf4j-jdk14バインディングの代わりにlog4jを使用したい場合、私は見つけました このページ. 。私はそれを試しましたが、私はそれを動作させることができなかったので、私はまだ自分の解決策に固執します。
この場合、私はbean.xmlをMeta-infに配置していません。