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.<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)
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
java.security.SecureRandom は Linux 上の /dev/random に依存しているため (Linux の乱数生成メカニズムについてはこちらを参照)、問題が発生したサーバーでテスト プログラムを実行した後、テスト スクリプトを実行します。結果は次のとおりです。
[java] プレーンコピーを表示
haitao-yao@haitaoyao-laptop:/data/develop/java/jre/lib/security$ jps && lsof /dev/random
7399 JPs
7382 テストランダム
コマンド PID ユーザー FD タイプ デバイス サイズ/オフ ノード名
java 7382 ハイタオヤオ 4r CHR 1,8 0t0 4402 /dev/random
したがって、乱数生成戦略に問題があることが原因であると結論付けられます。
Google は、jetty でこのバグを発見しました (Jetty HashSessionIdManager が起動時にハングします)。この問題は jdk バグ データベースでも報告されています (ここを参照)。
java.security.SecureRandom は次のように依存します。 /dev/random は乱数を生成するため、/dev/random を使用するとシステム割り込みが不十分なために jdk がフリーズする可能性があります。 Jetty を起動できず、最終的には起動時にネームノード全体がフリーズします。
解決策は、Sun のバグ データベースにも記載されています。 -Djava.security.egd=file:/dev/urandom を Java プログラムの起動パラメータに追加し、/dev/urandom を使用して乱数を生成します。
/dev/random と /dev/urandom の違いの分析については、ここを参照してください。これ以上の詳細はありません。
概要:
Hadoop は http プロトコルを通じて HTML ページを提供し、システムの内部状態を公開します。これは分散システムの設計において非常に優れた機能ですが、Jetty の統合により、統合された Jetty は彼は強くなかったので、この問題は明らかになりました。結局のところ、Hadoop が内部桟橋を開始するために別のスレッドを使用しない理由が本当に理解できません。結局のところ、このような補助的な機能はシステムのコア機能に影響を与えるため、これは価値がありません。ゲイン。