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
Memandangkan java.security.SecureRandom bergantung pada /dev/random pada Linux (lihat di sini untuk mekanisme penjanaan nombor rawak Linux), jalankan skrip ujian selepas menjalankan program ujian pada pelayan di mana masalah itu berlaku berikut:
[ java] lihat salinan biasa
haitao-yao@haitaoyao-laptop:/data/develop/java/jre/lib/security$ jps && lsof /dev/random
7399 Jps
7382 TestRandom
PERINTAH PID PENGGUNA JENIS FD SAIZ PERANTI/MATI NAMA NOD
java 7382 haitao-yao 4r CHR 1,8 0t0 4402 /dev/random
Jadi disimpulkan bahawa ia adalah disebabkan oleh masalah dengan strategi penjanaan nombor rawak.
Google menjumpai pepijat ini di jeti (Jetty HashSessionIdManager terhenti semasa permulaan seseorang juga telah membangkitkan isu ini dalam pangkalan data pepijat jdk (lihat di sini pengenalan ringkas:
java.security.SecureRandom bergantung pada /). dev/random menjana nombor rawak, yang boleh menyebabkan jdk membeku apabila menggunakan /dev/random disebabkan gangguan sistem yang tidak mencukupi. Jeti tidak boleh dimulakan, akhirnya menyebabkan keseluruhan nod nama menjadi beku semasa dimulakan.
Penyelesaian juga telah diberikan dalam pangkalan data pepijat matahari, iaitu menambah: -Djava.security.egd=file:/dev/urandom kepada parameter permulaan program java dan gunakan /dev/urandom untuk menjana nombor rawak.
Untuk analisis perbezaan antara /dev/random dan /dev/urandom, sila lihat di sini, tiada butiran lanjut.
Ringkasan:
Hadoop menyediakan halaman HTML melalui protokol http untuk mendedahkan keadaan dalaman sistem Ini adalah ciri yang sangat baik dalam reka bentuk sistem teragih, tetapi disebabkan penyepaduan jeti, jeti bersepadu adalah. boleh dikonfigurasikan dalam hadoop Dia tidak kuat, jadi masalah ini terdedah. Saya benar-benar tidak faham mengapa Hadoop tidak menggunakan benang yang berasingan untuk memulakan jeti dalaman Lagipun, ini bukan fungsi utama nod nama, kerana fungsi sampingan sedemikian mempengaruhi fungsi teras sistem, yang tidak bernilai. keuntungan itu.