代码之家  ›  专栏  ›  技术社区  ›  Matteo NNZ

如何检查服务器上的Jboss实例是否与本地同一实例的行为不同?

  •  1
  • Matteo NNZ  · 技术社区  · 7 年前

    enter image description here

    SOAP客户端联系Jboss实例上运行的WebService(无论它是本地运行还是远程运行),WebService调用(在RMI中)远程应用程序,远程应用程序用一些数据进行响应并将它们返回给请求者。

    我的问题大致如下:

    • 在Jboss本地实例上,响应被正确地返回到SOAP客户端,如下所示:

      <soap:Envelope>
          <soap:Body>
              <myResponse>
                  [ELEMENTS OF MY RESPONSE]
              </myResponse>
          </soap:Body>
      </soap:Envelope>
      
    • 在Jboss远程实例上,返回响应 空的 对于SOAP客户端,即使在服务器端和Jboss实例上都没有引发任何错误:

      <soap:Envelope>
          <soap:Body>
              <myResponse>
                  EMPTY IN HERE
              </myResponse>
          </soap:Body>
      </soap:Envelope>
      

    因为它在本地实例上工作,所以我对如何解决这个问题没有太多想法。这就是我迄今为止所尝试的:

    • .war 它部署在远程实例上,与在本地实例中使用的完全相同。
    • 我试着反编译 战争 在远程实例中,检查 wsdl / xsd
    • 我还尝试在应用服务器上附加一个远程调试器,以检查远程Jboss实例调用时是否正确准备了响应:服务器端的响应是正确的。
    • 我试着比较一下 standalone-full.xml 本地和远程实例的(配置文件),我能看到的唯一区别是远程版本中远程处理的套接字绑定,而本地版本中没有:

      <socket-binding name="remoting" port="1013"/>
      
    • 最后,我在Jboss远程实例上附加了一个远程调试器,并检查了WebService本身中发生的情况。输入和输出准备充分:

      @WebMethod
      @WebResult(name = "ProductEvaluation")
      public ProductEvaluations myAPIRequest(@WebParam(name = "XmlProducts") final XmlProducts xmlProducts,
          @WebParam(name = "ConnectedToRealtime") final boolean connectedToRealtime,
          @WebParam(name = "Timeout") final Timeout timeout) throws ProductEvaluationFault, TimeoutFault, ProductConfigurationFault, SecurityFault {
          try {
              // some stuff here...
              return result; //result contains what I want
          } catch (SecurityException e) {
              throw new SecurityFault(e.getMessage());
          }
      }
      

      堆栈中较早出现的所有内容都是通用的:

      NativeMethodAccessorImpl.invoke(Object, Object[]) line: 62  
      DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43  
      Method.invoke(Object, Object...) line: 498  
      ManagedReferenceMethodInterceptor.processInvocation(InterceptorContext) line: 52    
      InterceptorContext.proceed() line: 340  
      ConcurrentContextInterceptor.processInvocation(InterceptorContext) line: 45 
      InterceptorContext.proceed() line: 340  
      InitialInterceptor.processInvocation(InterceptorContext) line: 21   
      InterceptorContext.proceed() line: 340  
      ChainedInterceptor.processInvocation(InterceptorContext) line: 61   
      ComponentDispatcherInterceptor.processInvocation(InterceptorContext) line: 52   
      InterceptorContext.proceed() line: 340  
      WSComponentInstanceAssociationInterceptor.processInvocation(InterceptorContext) line: 56    
      InterceptorContext.proceed() line: 340  
      InterceptorContext.run() line: 356  
      WildFlySecurityManager.doChecked(PrivilegedExceptionAction<T>) line: 636    
      AccessCheckingInterceptor.processInvocation(InterceptorContext) line: 61    
      InterceptorContext.proceed() line: 340  
      InterceptorContext.run() line: 356  
      PrivilegedWithCombinerInterceptor.processInvocation(InterceptorContext) line: 80    
      InterceptorContext.proceed() line: 340  
      ChainedInterceptor.processInvocation(InterceptorContext) line: 61   
      ViewService$View.invoke(InterceptorContext) line: 195   
      InvocationHandlerJAXWS(AbstractInvocationHandler).invoke(Endpoint, Invocation) line: 137    
      JBossWSInvoker.performInvocation(Exchange, Object, Method, Object[]) line: 169  
      JBossWSInvoker(AbstractInvoker).invoke(Exchange, Object, Method, List<Object>) line: 96 
      JBossWSInvoker(AbstractJAXWSMethodInvoker).invoke(Exchange, Object, Method, List<Object>) line: 232 
      JBossWSInvoker(JAXWSMethodInvoker).invoke(Exchange, Object, Method, List<Object>) line: 85  
      JBossWSInvoker.invoke(Exchange, Object) line: 145   
      ServiceInvokerInterceptor$1.run() line: 59  
      Executors$RunnableAdapter<T>.call() line: 511   
      ServiceInvokerInterceptor$2(FutureTask<V>).run() line: 266  
      ServiceInvokerInterceptor$2.run() line: 126 
      SynchronousExecutor.execute(Runnable) line: 37  
      ServiceInvokerInterceptor.handleMessage(Message) line: 131  
      PhaseInterceptorChain.doIntercept(Message) line: 308    
      ChainInitiationObserver.onMessage(Message) line: 121    
      ServletDestination(AbstractHTTPDestination).invoke(ServletConfig, ServletContext, HttpServletRequest, HttpServletResponse) line: 251    
      RequestHandlerImpl.handleHttpRequest(Endpoint, HttpServletRequest, HttpServletResponse, ServletContext) line: 108   
      ServletHelper.callRequestHandler(HttpServletRequest, HttpServletResponse, ServletContext, Bus, Endpoint) line: 134  
      CXFServletExt.invoke(HttpServletRequest, HttpServletResponse) line: 88  
      CXFServletExt(AbstractHTTPServlet).handleRequest(HttpServletRequest, HttpServletResponse) line: 293 
      CXFServletExt(AbstractHTTPServlet).doPost(HttpServletRequest, HttpServletResponse) line: 212    
      CXFServletExt(HttpServlet).service(HttpServletRequest, HttpServletResponse) line: 707   
      CXFServletExt.service(HttpServletRequest, HttpServletResponse, ServletContext) line: 136    
      WSFServlet.service(HttpServletRequest, HttpServletResponse) line: 140   
      WSFServlet(HttpServlet).service(ServletRequest, ServletResponse) line: 790  
      ServletHandler.handleRequest(HttpServerExchange) line: 85   
      ServletSecurityRoleHandler.handleRequest(HttpServerExchange) line: 62   
      ServletDispatchingHandler.handleRequest(HttpServerExchange) line: 36    
      SecurityContextAssociationHandler.handleRequest(HttpServerExchange) line: 78    
      PredicateHandler.handleRequest(HttpServerExchange) line: 43 
      SSLInformationAssociationHandler.handleRequest(HttpServerExchange) line: 131    
      ServletAuthenticationCallHandler.handleRequest(HttpServerExchange) line: 57 
      PredicateHandler.handleRequest(HttpServerExchange) line: 43 
      ServletConfidentialityConstraintHandler(AbstractConfidentialityHandler).handleRequest(HttpServerExchange) line: 46  
      ServletConfidentialityConstraintHandler.handleRequest(HttpServerExchange) line: 64  
      AuthenticationMechanismsHandler.handleRequest(HttpServerExchange) line: 60  
      CachedAuthenticatedSessionHandler.handleRequest(HttpServerExchange) line: 77    
      NotificationReceiverHandler.handleRequest(HttpServerExchange) line: 50  
      SecurityInitialHandler(AbstractSecurityContextAssociationHandler).handleRequest(HttpServerExchange) line: 43    
      PredicateHandler.handleRequest(HttpServerExchange) line: 43 
      JACCContextIdHandler.handleRequest(HttpServerExchange) line: 61 
      PredicateHandler.handleRequest(HttpServerExchange) line: 43 
      PredicateHandler.handleRequest(HttpServerExchange) line: 43 
      ServletInitialHandler.handleFirstRequest(HttpServerExchange, ServletChain, ServletRequestContext, ServletRequest, ServletResponse) line: 285    
      ServletInitialHandler.dispatchRequest(HttpServerExchange, ServletRequestContext, ServletChain, DispatcherType) line: 264    
      ServletInitialHandler.access$000(ServletInitialHandler, HttpServerExchange, ServletRequestContext, ServletChain, DispatcherType) line: 81   
      ServletInitialHandler$1.handleRequest(HttpServerExchange) line: 175 
      Connectors.executeRootHandler(HttpHandler, HttpServerExchange) line: 202    
      HttpServerExchange$1.run() line: 792    
      XnioWorker$TaskPool(ThreadPoolExecutor).runWorker(ThreadPoolExecutor$Worker) line: 1142 
      ThreadPoolExecutor$Worker.run() line: 617   
      Thread.run() line: 748  
      

    1 回复  |  直到 7 年前
        1
  •  0
  •   Matteo NNZ    7 年前

    经过几个小时的努力,我终于自己找到了问题所在。

    虽然这看起来可能是一个简单的打字错误,但它让我损失了很多时间,并显示了Jboss远程和本地实例之间有趣的行为差异,因此我发布了一个答案,以腾出一些时间给犯同样错误的人。

    新的 @WebMethod

    @WebMethod
    @WebResult(name = "ProductEvaluation")
    public ProductEvaluations myAPIRequest(@WebParam(name = "XmlProducts") final XmlProducts xmlProducts,
        @WebParam(name = "ConnectedToRealtime") final boolean connectedToRealtime,
        @WebParam(name = "Timeout") final Timeout timeout) throws ProductEvaluationFault, TimeoutFault, ProductConfigurationFault, SecurityFault {
        try {
            // some stuff here...
            return result; //result contains what I want
        } catch (SecurityException e) {
            throw new SecurityFault(e.getMessage());
        }
    }
    

    正如你可能注意到的(我实际上花了4个小时才注意到它,所以它可能不那么显眼):

    • 函数的返回类型为 ProductEvaluations (意思是一个列表) ProductEvaluation wsdl 和 xsd
    • 然而,我忘记了那件事 s @WebResult(name="ProductEvaluation")

    因此,根据我的经验,我注意到:

    • 当Jboss在本地运行时,注释 @WebResult 忽略,并且在任何情况下都会返回结果。
    • 然而,当Jboss远程运行时,这个映射就完成了。所以,因为我回来了, 产品评估 s )但是说 是一个 (没有 s