2017-09-18 20 views
0

Axis2를 사용하여 웹 서비스 클라이언트 연결을 만들려고합니다. UserameToken을 설정하려면 PasswordCallBack을 사용해야합니다. 여기 ClassNotFoundException Axis2 구성 파일을 읽는 중

ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem("src/main/resources/axis", "src/main/resources/axis/conf/axis2.xml"); 

      TransactionProcessorStub stub = new TransactionProcessorStub(ctx, SERVER_URL); 
      ServiceClient client = stub._getServiceClient(); 
      Options clientOptions = client.getOptions(); 
      clientOptions.setProperty(WSHandlerConstants.USER, request.getMerchantID()); 

내 conf의 구조입니다 : 여기

내 클라이언트 코드와 axis2.xml 내에서 내가 javaranch

에서 샘플을 사용하여 내 비밀번호 콜백을 설정

enter image description here

다음은 코드 스 니펫입니다.

<phaseOrder type="InFlow"> 
     <!-- System pre-defined phases  --> 
     <phase name="Transport"> 
      <handler name="RequestURIBasedDispatcher" 
        class="org.apache.axis2.engine.RequestURIBasedDispatcher"> 
       <order phase="Transport"/> 
      </handler> 
      <handler name="SOAPActionBasedDispatcher" 
        class="org.apache.axis2.engine.SOAPActionBasedDispatcher"> 
       <order phase="Transport"/> 
      </handler> 
     </phase> 
     <phase name="Security"/> 
     <phase name="PreDispatch"/> 
     <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase"> 
      <handler name="AddressingBasedDispatcher" 
        class="org.apache.axis2.engine.AddressingBasedDispatcher"> 
       <order phase="Dispatch"/> 
      </handler> 

      <handler name="SOAPMessageBodyBasedDispatcher" 
        class="org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher"> 
       <order phase="Dispatch"/> 
      </handler> 
      <handler name="InstanceDispatcher" 
        class="org.apache.axis2.engine.InstanceDispatcher"> 
       <order phase="Dispatch"/> 
      </handler> 
     </phase> 
     <!-- System pre defined phases  --> 
     <!-- After Postdispatch phase module author or or service author can add any phase he want  --> 
     <phase name="OperationInPhase"/> 
    </phaseOrder> 

나는 Maven을 사용하여 클라이언트 코드를 생성하는데 모든 것이 잘 진행되고있다.

ConfigurationContextFactory.createConfigurationContextFromFileSystem ("SRC/메인/자원/축", "SRC/메인/자원/축/conf의/axis2.xml : 응용 프로그램이 줄 ConfigurationContext을 만들려고 할 때

문제는 ");

나는 다음과 같이 ClassNotFoundException가 얻을 :

org.apache.axis2.deployment.DeploymentException : org.apache.axis2.deployment.util.Utils에서 org.apache.axis2.engine.RequestURIBasedDispatcher. org.apache.axis2.deployment.AxisConfigBuilder.processPhaseOrders (AxisConfigBuilder.java:606) 에서 loadHandler org.apache.axis2.deployment.AxisConfigBuilder.processPhaseList (AxisConfigBuilder.java:575)에서 (Utils.java:147) at org.apache.axis2.deployment.AxisConfigBuilder.populateConfig (AxisConfig org.apache.axis2.deployment.DeploymentEngine.populateAxisConfiguration org.apache.axis2.deployment.FileSystemConfigurator.getAxisConfiguration (FileSystemConfigurator.java:116에서 (DeploymentEngine.java:629) ) 에서의 Builder.java:149) au.com.jaycar.gateway에서 org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContext org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContextFromFileSystem (ConfigurationContextFactory.java:210)에서 (ConfigurationContextFactory.java:64) .cybersourceClient.Sample.main (Sample.java:96) 발생 원인 : java.lang.ClassNotFoundException : org.apache.ax sun.misc.Launcher $ AppClassLoader.loadClass에서 java.lang.ClassLoader.loadClass (ClassLoader.java:424)에서 java.net.URLClassLoader.findClass (URLClassLoader.java:381)에서 is2.engine.RequestURIBasedDispatcher (실행기 .java : 335) at 에있는 java.lang.ClassLoader.loadClass (ClassLoader.java:357) 의 java.lang.Class.forName0 (기본 메소드) java.lang.Class.forName (Class.java:264) org.apache.axis2.util.Loader.loadClass (Loader.java:261) org.apache.axis2.util.Loader.loadClass (Loader.java:229)에서 org.apache.axis2.deployment. util.Utils.loadHandler (Utils.java:114) ...8 이상

라이브러리 또는 구성이 누락 된 것일 수 있습니다. 필자는 그것이 필자의 maven 의존성에있는 axis2-kernel에 있다고 확신하기 때문에, 그렇지 않으면 소스 코드는 컴파일되지 않을 것이다.

구성 또는 클래스 경로에 문제가 있습니까?

답변

0

문제를 해결할 수 있습니다. 나는 axis2.xml과 서버 모듈을로드 할 필요가 없었다. 나는 그들 모두를 제거하고 나는 성벽 샘플에서 첫 번째 샘플 코드에서 policy.xml이 사용하고 클라이언트 옵션에로드 :

ConfigurationContext의 CTX = ConfigurationContextFactory.createConfigurationContextFromFileSystem ("SRC/메인/자원/축" null); TransactionProcessorStub 스텁 = 새 TransactionProcessorStub (ctx, SERVER_URL); ServiceClient 클라이언트 = stub._getServiceClient(); 옵션 clientOptions = client.getOptions(); clientOptions.setProperty (WSHandlerConstants.USER, request.getMerchantID()); StAXOMBuilder 빌더 = 새 StAXOMBuilder ("src/main/resources/axis/conf/policy.xml"); 정책 policy = PolicyEngine.getPolicy (builder.getDocumentElement()); clientOptions.setProperty (RampartMessageData.KEY_RAMPART_POLICY, policy); client.setOptions (clientOptions); client.engageModule ("rampart"); stub._setServiceClient (client); ReplyMessageDocument 응답 = stub.runTransaction (문서);