我正在使用JBoss开关站连接到安全的远程SOAP web服务。在发送请求后出于某种原因;远程web服务正在停止任何进一步的通信;所以我没有收到回复。
我需要一个想法或解决方案,这可能是个问题。
原因:java。网SocketException:SocketException调用https://***********。asmx:来自服务器的文件意外结束
问题可能是由于SOAP请求的头无效或格式无效,您可以尝试下面的代码
1你需要HeaderHandlerResolver
public class HeaderHandlerResolver implements HandlerResolver {
public List<Handler> getHandlerChain(PortInfo portInfo) {
List<Handler> handlerChain = new ArrayList<Handler>();
HeaderHandler hh = new HeaderHandler();
handlerChain.add(hh);
return handlerChain;
}
}
然后您需要添加HeaderHandler类
public class HeaderHandler implements SOAPHandler<SOAPMessageContext> {
public boolean handleMessage(SOAPMessageContext smc) {
Boolean outboundProperty = (Boolean) smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (outboundProperty.booleanValue()) {
SOAPMessage message = smc.getMessage();
try {
SOAPEnvelope envelope = smc.getMessage().getSOAPPart().getEnvelope();
SOAPHeader header = envelope.getHeader();
header.setPrefix("soapenv");
header.setAttribute("xmlns:wsa", "http://www.w3.org/2005/08/addressing");
SOAPElement security =
header.addChildElement("Security", "wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
SOAPElement usernameToken =
security.addChildElement("UsernameToken", "wsse");
usernameToken.addAttribute(new QName("xmlns:wsu"), "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
SOAPElement username =
usernameToken.addChildElement("Username", "wsse");
username.addTextNode("USERNAME");
SOAPElement password =
usernameToken.addChildElement("Password", "wsse");
password.setAttribute("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
password.addTextNode("PASSWORD");
SOAPElement encode =
usernameToken.addChildElement("Nonce", "wsse");
encode.setAttribute("EncodingType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary");
encode.addTextNode(generateNonce());
Calendar createdTime = new GregorianCalendar(TimeZone.getTimeZone("IST"));
Date todayDate = createdTime.getTime();
todayDate.setTime(todayDate.getTime()-20000000);
SOAPElement created = usernameToken.addChildElement("Created", "wsu");
created.addTextNode(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss'Z'").format(todayDate));
SOAPElement action = header.addChildElement("Action", "wsa");
//YOUR ACTION URL SHOULD BE in BELOW Text Content
action.setTextContent("SET HERE YOUR ACTION URL");
message.saveChanges();
message.writeTo(System.out);
System.out.println("");
} catch (Exception e) {
e.printStackTrace();
}
} else {
try {
//This handler does nothing with the response from the Web Service so
//we just print out the SOAP message.
SOAPMessage message = smc.getMessage();
message.writeTo(System.out);
System.out.println("");
} catch (Exception ex) {
ex.printStackTrace();
}
}
return outboundProperty;
}
public Set getHeaders() {
return null;
}
public boolean handleFault(SOAPMessageContext context) {
return true;
}
public void close(MessageContext context) {
}
private static String generateNonce() throws NoSuchAlgorithmException, NoSuchProviderException, UnsupportedEncodingException {
String dateTimeString = Long.toString(new Date().getTime());
byte[] nonceByte = dateTimeString.getBytes();
return Base64.encodeBase64String(nonceByte);
}
}
现在,最后是调用SOAP服务的主要类
public class SoapClientClass {
public static void main(String[] args) {
ImplService service = new ImplService();
HeaderHandlerResolver handlerResolver = new HeaderHandlerResolver();
service.setHandlerResolver(handlerResolver);
ResponseClass port = service.getPortClass();
Response response = null;
try {
response = port.getServerMehotd("Params");
} catch (PolicyException_Exception e) {
e.printStackTrace();
} catch (ServiceException_Exception e) {
e.printStackTrace();
}
}
}
}
另外,确保从wsdl文件生成的代码最新,并且服务器位置url也正确。
希望它能解决你的问题
java.net.SocketException:服务器文件意外结束
此异常意味着服务器已接受您的连接,这意味着您的SSL握手确实成功。但是,在您得到响应之前,服务器(通过TCP重置或fin)关闭了连接。
重置通常在两种情况下发送:
通常,持久连接有两种配置:
Keep-Alive: timeout=15, max=100
timeout
表示以秒为单位的时间,max
表示最大请求。
让我们比较一下您描述的三个不同案例:
在第三种情况下,如果我理解正确的话,您的持久连接是从客户端到代理,而从代理到服务器是不清楚的。
client----->Proxy----->server
java-Dhttp.keepalive=false
启动mysql服务: sudo service mysql start 停止mysql服务: sudo service mysql stop 要连接到服务器,我们通常需要提供MySQL的用户名来触发mysql,很可能,还需要密码。如果你的服务器运行在一个其他的机器上,你还需要指定主机名。联系管理员来找到连接参数(例如主机名,用户名和密码),当你知道了正确的参数后,你可以像下面那样连接: she
我已经将IntelliJ连接到远程JVM,现在希望在远程JVM不停止的情况下断开与远程JVM的连接。在Eclipse中有两个按钮可以显式地停止JVM或断开与JVM的连接,但是IntelliJ中调试窗口上的按钮并不清楚。工具提示和在线帮助没有太大帮助。 停止(红色方块)-“单击此按钮,通过标准关机脚本从外部终止当前进程。” 关闭(红色X)-“单击此按钮关闭运行工具窗口的选定选项卡并终止当前进程。”
为了连接服务器,当调用mysql时,通常需要提供一个MySQL用户名并且很可能需要一个密码。如果服务器运行在登录服务器之外的其它机器上,还需要指定主机名。联系管理员以找出进行连接所使用的参数 (即,连接的主机、用户名和使用的密码)。知道正确的参数后,可以按照以下方式进行连接: shell> mysql -h host -u user -p Enter password: ******** host
Netty服务器,Fedora。我只是无法从远程主机连接到服务器,并且通过util没有显示监听套接字。但是我可以在同一台机器上建立运行客户端和服务器的连接。就像这样: 我已尝试仅使用端口、localhost IP、0.0.0.0 IP和网络IP初始化
我们用的是wildly 10 . 1 . 0最终版。 我们遇到了线程不断增长导致的OutOfMemoryError错误。 检查线程转储后。 我们发现有成千上万的远程处理“endpoint”任务 N 线程。 远程处理“终结点”任务 N 线程的用途是什么? 它们是由jobss-remoting创建的吗? 重新启动服务器后,我们发现一开始只有16个线程: 移除“endpoint”任务-1~移除“endp
问题内容: 我想对redis.conf进行一些更改,以便每当我键入redis-cli时,它就会将我连接到安装在远程服务器上的redis。 我知道我们可以通过以下方式连接到安装在远程服务器上的redis: 但是实际上,我有一些bash脚本,在那些脚本中,我在很多地方都使用过redis-cli。因此,我不想以每个文件中的redis-cli -h’IP- Address-Of-Server’替换redi