java - linux执行jar访问axis接口错误
PHP中文网
PHP中文网 2017-04-17 17:38:46
0
1
414

package test;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class TstCall {

public static void main(String[] args) throws ServiceException, RemoteException {
    //初始化参数
    String chgKind = "1"; // 1:增加;2:变更
    String workNo = "CY_yy" ;
    String workNAme = "白莉";
    String mobile = "15133333333";
    String dealerId = "920301832";
    String chgDate = "20160302";
    String YGZurl = null ;
    //创建服务
    Service YGZservice = new Service();
    //创建调用句柄
    Call YGZcall = (Call) YGZservice.createCall();
    //设置请求地址
    YGZcall.setTargetEndpointAddress(YGZurl);
    YGZcall.setOperationName(new QName(null, "IfService"));
    try 
    { 
        Object o =YGZcall.invoke(new Object[] { "","123","Service","",
                "<request><userlist><user><systemtype note=\"sour\">1</systemtype><kind note=\"chg\">"+chgKind+"</kind>"
                        +"<id note=\"num\">"+workNo+"</id><name note=\"numname\">"+workNAme+"</name><limit note=\"pp\">1</limit>"
                        +"<tel note=\"tel\">"+mobile+"</tel><belongfkid note=\"dealerID\">"+dealerId+"</belongfkid><starttime note=\"chgtime\">"+chgDate+"</starttime>"
                        +"</user></userlist></request>" });
    }catch(Exception e) { 
        e.printStackTrace();  
    }  
}

}

在window下执行都正常,但是在linux下执行报错:
执行语句:
java -jar -Djava.ext.dirs=/home/oracle/xf_everyday_check_p/javajar/lib/ test.jar
报错日志:
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 java.security.SecureRandom.nextBytes(SecureRandom.java:292)
    at org.apache.axis.utils.SessionUtils.generateSessionId(SessionUtils.java:62)
    at org.apache.axis.SOAPPart.&lt;init&gt;(SOAPPart.java:164)
    at org.apache.axis.Message.setup(Message.java:377)
    at org.apache.axis.Message.&lt;init&gt;(Message.java:246)
    at org.apache.axis.client.Call.invoke(Call.java:2425)
    at org.apache.axis.client.Call.invoke(Call.java:2366)
    at org.apache.axis.client.Call.invoke(Call.java:1812)
    at test.TstLinux.main(TstLinux.java:56)

    {http://xml.apache.org/axis/}hostname:LN-CRM-APP

java.lang.NullPointerException

    at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
    at org.apache.axis.client.Call.invoke(Call.java:1828)
    at test.TstLinux.main(TstLinux.java:56)

Caused by: java.lang.NullPointerException

    at java.security.SecureRandom.nextBytes(SecureRandom.java:292)
    at org.apache.axis.utils.SessionUtils.generateSessionId(SessionUtils.java:62)
    at org.apache.axis.SOAPPart.<init>(SOAPPart.java:164)
    at org.apache.axis.Message.setup(Message.java:377)
    at org.apache.axis.Message.<init>(Message.java:246)
    at org.apache.axis.client.Call.invoke(Call.java:2425)
    at org.apache.axis.client.Call.invoke(Call.java:2366)
    at org.apache.axis.client.Call.invoke(Call.java:1812)
    ... 1 more
PHP中文网
PHP中文网

认证高级PHP讲师

répondre à tous(1)
左手右手慢动作

Étant donné que java.security.SecureRandom s'appuie sur /dev/random sous Linux (voir ici pour le mécanisme de génération de nombres aléatoires Linux), exécutez le script de test après avoir exécuté le programme de test sur le serveur sur lequel le problème s'est produit. suit :
[ java] afficher la copie brute

  1. haitao-yao@haitaoyao-laptop:/data/develop/java/jre/lib/security$ jps && lsof /dev/random

  2. 7399 Jps

  3. 7382 TestAléatoire

  4. COMMANDE PID UTILISATEUR TYPE FD TAILLE DE L'APPAREIL/NOM DU NŒUD

  5. java 7382 haitao-yao 4r CHR 1,8 0t0 4402 /dev/random

On en conclut donc que cela est dû à un problème avec la stratégie de génération de nombres aléatoires.

Google a trouvé ce bug dans Jetty (Jetty HashSessionIdManager se bloque au démarrage). Quelqu'un a également soulevé ce problème dans la base de données de bugs jdk (voir ici) :
java.security.SecureRandom dépend de /. dev/random génère des nombres aléatoires, ce qui peut provoquer le blocage de jdk lors de l'utilisation de /dev/random en raison d'une interruption système insuffisante. Jetty ne peut pas être démarré, ce qui finit par geler l'ensemble du nœud de nom au démarrage.

La solution a également été donnée dans la base de données de bugs de Sun, qui consiste à ajouter : -Djava.security.egd=file:/dev/urandom aux paramètres de démarrage du programme java et à utiliser /dev/urandom pour générer des nombres aléatoires.

Pour l'analyse des différences entre /dev/random et /dev/urandom, veuillez voir ici, pas plus de détails.

Résumé :
Hadoop fournit des pages HTML via le protocole http pour exposer l'état interne du système. Il s'agit d'une très bonne fonctionnalité dans la conception de systèmes distribués, mais en raison de l'intégration de Jetty, la jetée intégrée est. configurable dans hadoop. Il n'était pas fort, donc ce problème a été exposé. Je ne comprends vraiment pas pourquoi Hadoop n'utilise pas de thread séparé pour démarrer la jetée interne. Après tout, ce n'est pas la fonction principale du namenode, car de telles fonctions auxiliaires affectent les fonctions principales du système, ce qui n'en vaut pas la peine. le gain.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal