0

入力要求で、マスクする必要があるパスワードであるパラメーターを取得する必要があります。ロギング レベルをデバッグとして保持しているため、入力 xml はパスワード フィールドと共にログに記録されます。LogginginInterceptors と LoggingOutInterceptor をオーバーライドすることで、この問題を修正しました。

ただし、さらに分析すると、Abstract インボーカーは、呼び出されたメソッドのパラメーターとともに呼び出されたメソッドを出力していることがわかりました。したがって、パスワードフィールドが再び印刷されます。パラメータを出力するメソッドをオーバーライドできます。しかし、カスタム抽象メソッド インボーカーを登録する必要がある場所と方法。

2014-04-03 20:16:54,827 [http-8443-1] DEBUG o.a.c.s.invoker.AbstractInvoker - Invoking method public com.kp.schema.CredResObject com.kp.CredentialsImpl.updateCredentials(com.kp.schema.CredReqObject) throws com.kp.FaultResponse on object com.kp.CredentialsImpl@2ee4e8 with params [CredReqObject [clientID=kpid, host=asda, userName=u1, passWord=sssss]].

カスタム呼び出し元

public class NMSCustomInvoker extends AbstractInvoker {

    static final ResourceBundle BUNDLE = BundleUtils
            .getBundle(FactoryInvoker.class);

    private Factory factory;

    public NMSCustomInvoker(Factory factory) {
        this.factory = factory;
    }

    public NMSCustomInvoker() {
    }

    public void setFactory(Factory f) {
        this.factory = f;
    }

    @Override
    public Object getServiceObject(Exchange ex) {
        try {
            return factory.create(ex);
        } catch (Fault e) {
            throw e;
        } catch (Throwable e) {
            throw new Fault(new Message("CREATE_SERVICE_OBJECT_EXC", BUNDLE), e);
        }
    }

    public void releaseServiceObject(final Exchange ex, Object obj) {
        factory.release(ex, obj);
    }

    @Override
    protected Object performInvocation(Exchange exchange,
            final Object serviceObject, Method m, Object[] paramArray)
            throws Exception {
        paramArray = insertExchange(m, paramArray, exchange);
        return m.invoke(serviceObject, paramArray);
    }

}

ファクトリ オブジェクトが null であるため、null ポインター エラーが発生します。

更新された StackTrace

org.apache.cxf.interceptor.Fault: Could not instantiate service object.
    at mypackage.NMSCustomInvoker.getServiceObject(NMSCustomInvoker.java:45) ~[NMSCustomInvoker.class:na]
    at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:50) ~[cxf-api-2.7.8.jar:2.7.8]
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58) ~[cxf-api-2.7.8.jar:2.7.8]
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:94) ~[cxf-api-2.7.8.jar:2.7.8]
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272) ~[cxf-api-2.7.8.jar:2.7.8]
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) [cxf-api-2.7.8.jar:2.7.8]
    at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239) [cxf-rt-transports-http-2.7.8.jar:2.7.8]
    at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248) [cxf-rt-transports-http-2.7.8.jar:2.7.8]
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222) [cxf-rt-transports-http-2.7.8.jar:2.7.8]
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153) [cxf-rt-transports-http-2.7.8.jar:2.7.8]
    at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:167) [cxf-rt-transports-http-2.7.8.jar:2.7.8]
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286) [cxf-rt-transports-http-2.7.8.jar:2.7.8]
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:211) [cxf-rt-transports-http-2.7.8.jar:2.7.8]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:734) [servlet-api-3.0-alpha-1.jar:3.0-alpha-1]
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262) [cxf-rt-transports-http-2.7.8.jar:2.7.8]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) [catalina.jar:6.0.37]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:6.0.37]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) [catalina.jar:6.0.37]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) [catalina.jar:6.0.37]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) [catalina.jar:6.0.37]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) [catalina.jar:6.0.37]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [catalina.jar:6.0.37]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) [catalina.jar:6.0.37]
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861) [tomcat-coyote.jar:6.0.37]
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606) [tomcat-coyote.jar:6.0.37]
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) [tomcat-coyote.jar:6.0.37]
    at java.lang.Thread.run(Thread.java:662) [na:1.6.0_32]
Caused by: java.lang.NullPointerException: null
    at mypackage.NMSCustomInvoker.getServiceObject(NMSCustomInvoker.java:41) ~[NMSCustomInvoker.class:na]
    ... 26 common frames omitted
4

1 に答える 1

1

cxf-jaxws または cxf-jaxrs フロントエンド API を使用している場合は、このように自分で呼び出し元を設定できます。

ServerFactoryBean.setInvoker(new MyInvoker());

スプリング構成を使用している場合は、カスタム呼び出し元を次のように設定できます

<jaxws:endpoint id="simpleWithBinding"
    implementor="#greeter" 
        address="http://localhost:8080/simpleWithAddress">
    <jaxws:invoker>
       <bean id="myInvoker" class="com.example.MyInvoker"/>
    </jaxws:invoker>
  </jaxws:endpoint>
于 2014-04-09T03:42:01.313 に答える