Axis异常解决笔记

来源:互联网 发布:海康威视 算法研究院 编辑:程序博客网 时间:2024/05/16 14:47
版本:Axis  1.4

使用场景:国政通身份认证ID5接口

报错异常:


AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode:
 faultString: java.lang.NullPointerException
 faultActor:
 faultNode:
 faultDetail:
    {http://xml.apache.org/axis/}stackTrace:java.lang.NullPointerException
    at org.apache.axis.wsa.UUIDGenerator.getUUID(UUIDGenerator.java:58)
    at org.apache.axis.wsa.MIHeader.<init>(MIHeader.java:74)
    at org.apache.axis.wsa.WSAHandler.processClientResponse(WSAHandler.java:80)
    at org.apache.axis.wsa.WSAHandler.invoke(WSAHandler.java:41)
    at org.apache.axis.client.AxisClient.invokeTransport(AxisClient.java:154)
    at org.apache.axis.client.AxisClient.invoke(AxisClient.java:289)
    at org.apache.axis.client.Call.invokeEngine(Call.java:2838)
    at org.apache.axis.client.Call.invoke(Call.java:2824)
    at org.apache.axis.client.Call.invoke(Call.java:2501)
    at org.apache.axis.client.Call.invoke(Call.java:2424)
    at org.apache.axis.client.Call.invoke(Call.java:1835)
    at cn.id5.gboss.businesses.validator.service.app.QueryValidatorServicesSoapBindingStub.querySingle(QueryValidatorServicesSoapBindingStub.java:129)
    at org.id5.wsclient.test.Id5Util.check(Id5Util.java:71)
    at com.youqian.id5.Id5Cfm.doPost(Id5Cfm.java:53)
    at com.youqian.id5.Id5Cfm.doGet(Id5Cfm.java:33)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

    {http://xml.apache.org/axis/}hostname:127.0.0.1

java.lang.NullPointerException
    at org.apache.axis.AxisFault.makeFault(AxisFault.java:104)
    at org.apache.axis.client.AxisClient.invoke(AxisClient.java:308)
    at org.apache.axis.client.Call.invokeEngine(Call.java:2838)
    at org.apache.axis.client.Call.invoke(Call.java:2824)
    at org.apache.axis.client.Call.invoke(Call.java:2501)
    at org.apache.axis.client.Call.invoke(Call.java:2424)
    at org.apache.axis.client.Call.invoke(Call.java:1835)
    at cn.id5.gboss.businesses.validator.service.app.QueryValidatorServicesSoapBindingStub.querySingle(QueryValidatorServicesSoapBindingStub.java:129)
    at org.id5.wsclient.test.Id5Util.check(Id5Util.java:71)
    at com.youqian.id5.Id5Cfm.doPost(Id5Cfm.java:53)
    at com.youqian.id5.Id5Cfm.doGet(Id5Cfm.java:33)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
    at org.apache.axis.wsa.UUIDGenerator.getUUID(UUIDGenerator.java:58)
    at org.apache.axis.wsa.MIHeader.<init>(MIHeader.java:74)
    at org.apache.axis.wsa.WSAHandler.processClientResponse(WSAHandler.java:80)
    at org.apache.axis.wsa.WSAHandler.invoke(WSAHandler.java:41)
    at org.apache.axis.client.AxisClient.invokeTransport(AxisClient.java:154)
    at org.apache.axis.client.AxisClient.invoke(AxisClient.java:289)
    ... 31 more


解决方案:

此异常是Axis程序太老,代码不完善造成,参考原因:

http://blog.csdn.net/wocaonima123987/article/details/8807990


找到问题代码片段UUIDGenerator.java,红色字体部分为产生异常的代码:

package org.apache.axis.wsa;

import java.net.InetAddress;
import java.security.SecureRandom;
import java.util.Random;

public class UUIDGenerator
{
  private static UUIDGenerator gen = null;
 
  private Random seeder;
  private String midValue;
  private String baseURI ="/guid/";
 
  protected UUIDGenerator()
  {
    try {
      // get the internet address
      InetAddress inet = InetAddress.getLocalHost();
      byte[] bytes = inet.getAddress();
      String hexInetAddress = hexFormat(getInt(bytes),8);
      
      // get the hashcode for this object
      String thisHashCode = hexFormat(System.identityHashCode(this),8);
      
      // set up midvalue string
      this.midValue = hexInetAddress+thisHashCode;
      
      //load up the randomizer
      seeder = new Random(); // SecureRandom();
      int node = seeder.nextInt();
      
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
    
  }
 
  public static UUIDGenerator getInstance()
  {
    if (gen == null)
    {
      gen = new UUIDGenerator();
    }    
    return gen;
  }

  public String getUUID()
  {
    long timeNow = System.currentTimeMillis();
    
    // get int value as unsigned
    int timeLow = (int) timeNow & 0xFFFFFFFF;
    
    // get next random value
    int node = seeder.nextInt();
    
    return (hexFormat(timeLow,8) + midValue + hexFormat(node,8));
  }
 
  public String getUUIDURI()
  {
    long timeNow = System.currentTimeMillis();
    
    // get int value as unsigned
    int timeLow = (int) timeNow & 0xFFFFFFFF;
    
    // get next random value
    int node = seeder.nextInt();
    
    return baseURI + (hexFormat(timeLow,8) + midValue + hexFormat(node,8));
    
  }
 
  private int getInt(byte[] byteInput)
    {
        int i = 0;
        int j = 24;
        for(int k = 0; j >= 0; k++)
        {
            int l = byteInput[k] & 0xff;
            i += l << j;
            j -= 8;
        }

        return i;
    }

    private String hexFormat(int i, int len)
    {
        String str = Integer.toHexString(i);
        StringBuffer stringbuffer = new StringBuffer();
        int actualLen = str.length();
        
        if(actualLen < len)
        {
            for(int j = 0; j < len - actualLen; j++)
                stringbuffer.append("0");

        }
        stringbuffer.append(str);
        
        return stringbuffer.toString();
        
    }

    public void setBaseURI(String baseURI)
    {
      this.baseURI = baseURI;
    }
   
}



一番修改后,提供了替换的源码,红字部分为修改错误而增加的代码:

package org.apache.axis.wsa;

import java.net.InetAddress;
import java.security.SecureRandom;
import java.util.Random;

public class UUIDGenerator {
    private static UUIDGenerator gen = null;

    private Random seeder;
    private String midValue;
    private String baseURI = "/guid/";

    protected UUIDGenerator() {
        try {
            // get the internet address
            InetAddress inet = InetAddress.getLocalHost();  //此句异常导致UUID不能正常运行
            byte[] bytes = inet.getAddress();
            String hexInetAddress = hexFormat(getInt(bytes), 8);

            // get the hashcode for this object
            String thisHashCode = hexFormat(System.identityHashCode(this), 8);

            // set up midvalue string
            this.midValue = hexInetAddress + thisHashCode;

            // load up the randomizer
            seeder = new Random(); // SecureRandom();
            int node = seeder.nextInt();

        } catch (Exception e) {
            //System.out.println("UUIDGenerator Init Error!");
            e.printStackTrace();
            // load up the randomizer
            seeder = new Random(); // SecureRandom();
            int node = seeder.nextInt();
            this.midValue =  seeder.nextInt()+"";

        }

    }

    public static UUIDGenerator getInstance() {
        if (gen == null) {
            gen = new UUIDGenerator();
        }
        return gen;
    }

    public String getUUID() {
        long timeNow = System.currentTimeMillis();
        //System.out.println("timeNow"+timeNow);
        // get int value as unsigned
        int timeLow =  (int) timeNow & 0xFFFFFFFF;
        //System.out.println("timeLow"+timeLow);
        // get next random value
        int node=seeder.nextInt();
    
        return (hexFormat(timeLow, 8) + midValue + hexFormat(node, 8));
    }

    public String getUUIDURI() {
        long timeNow = System.currentTimeMillis();

        // get int value as unsigned
        int timeLow = (int) timeNow & 0xFFFFFFFF;

        // get next random value
        int node = seeder.nextInt();

        return baseURI
                + (hexFormat(timeLow, 8) + midValue + hexFormat(node, 8));

    }

    private int getInt(byte[] byteInput) {
        int i = 0;
        int j = 24;
        for (int k = 0; j >= 0; k++) {
            int l = byteInput[k] & 0xff;
            i += l << j;
            j -= 8;
        }

        return i;
    }

    private String hexFormat(int i, int len) {
        //System.out.println("i,len"+i+","+len);
        String str = Integer.toHexString(i);
        StringBuffer stringbuffer = new StringBuffer();
        int actualLen = str.length();

        if (actualLen < len) {
            for (int j = 0; j < len - actualLen; j++)
                stringbuffer.append("0");

        }
        stringbuffer.append(str);

        return stringbuffer.toString();

    }

    public void setBaseURI(String baseURI) {
        this.baseURI = baseURI;
    }

}


然后部署到服务器上,运行正常了。

服务器环境 CentOs6.5 64位;java 1.7 64位;tomcat 7 64位


0 0
原创粉丝点击