Java 无法将sendViaPost发送到url读取超时
我现在正在从事java web服务客户端的工作。但我面临着一个大问题。我的问题是: 我通过Eclipse的web服务客户端生成器生成web服务客户端。它通过ApacheAxis2生成web服务。生成了我的web服务java代码,我成功地将其与wsdl一起使用,wsdl不需要安全头。但是我不能将它用于需要安全头的web服务 我试着用小提琴来满足我的要求。但fiddler没有捕获任何与我的请求相关的数据包。但当我打印创建的请求并将此xml与soapui一起使用时,操作将成功执行 增加超时设置无效 我能做什么 我的xml和java错误如下所示:Java 无法将sendViaPost发送到url读取超时,java,web-services,axis2,Java,Web Services,Axis2,我现在正在从事java web服务客户端的工作。但我面临着一个大问题。我的问题是: 我通过Eclipse的web服务客户端生成器生成web服务客户端。它通过ApacheAxis2生成web服务。生成了我的web服务java代码,我成功地将其与wsdl一起使用,wsdl不需要安全头。但是我不能将它用于需要安全头的web服务 我试着用小提琴来满足我的要求。但fiddler没有捕获任何与我的请求相关的数据包。但当我打印创建的请求并将此xml与soapui一起使用时,操作将成功执行 增加超时设置无效 我
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" mustUnderstand="1">
<wsse:UsernameToken>
<wsse:Username>username</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
<wsse:ReplyTo xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:Address>http://www.w3.org/2005/08/addressing/anonymous</wsse:Address>
</wsse:ReplyTo>
<wsse:MessageID xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">urn:uuid:123</wsse:MessageID>
<wsse:Action xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" mustUnderstand="1">http://www.saglik.gov.tr/KPS/2011/KPSServices/TcKimlikNoIleKisiSorgula</wsse:Action>
</soapenv:Header>
<soapenv:Body>
<ns1:TcKimlikNoIleKisiSorgula xmlns:ns1="http://www.saglik.gov.tr/KPS/2011">
<ns1:tcNo>155***58</ns1:tcNo>
</ns1:TcKimlikNoIleKisiSorgula>
</soapenv:Body>
</soapenv:Envelope>
下面是我的代码
public static void main(String[] args){
ServiceStub stub = new ServiceStub();
ServiceClient client = stub._getServiceClient();
client.addHeader(createSecurityHeader("username", "password"));
OMNamespaceImpl wsseNS = new OMNamespaceImpl(WSConstants.WSSE_NS, WSConstants.WSSE_PREFIX);
OMFactory factory = new SOAP11Factory();
OMElementImpl replyToElement;
OMElementImpl addressElement;
OMElementImpl messageIDElement; OMElementImpl actionElement;
replyToElement = new OMElementImpl("ReplyTo", wsseNS, factory);
addressElement = new OMElementImpl("Address", wsseNS, replyToElement, factory);
addressElement.setText("http://www.w3.org/2005/08/addressing/anonymous");
client.addHeader(replyToElement);
messageIDElement = new OMElementImpl("MessageID", wsseNS, factory);
messageIDElement.setText("urn:uuid:"+123);
client.addHeader(messageIDElement);
actionElement = new OMElementImpl("Action", wsseNS, factory);
actionElement.addAttribute("mustUnderstand", "1", null);
actionElement.setText("http://www.saglik.gov.tr/KPS/2011/KPSServices/TcKimlikNoIleKisiSorgula");
client.addHeader(actionElement);
Options options = client.getOptions();
options.setProperty(HTTPConstants.CHUNKED, "false");
options.setProperty(HTTPConstants.HTTP_PROTOCOL_VERSION, HTTPConstants.HEADER_PROTOCOL_11);
TcKimlikNoIleKisiSorgula kisi = new TcKimlikNoIleKisiSorgula();
kisi.setTcNo(155*****58L);//require an long
stub.starttcKimlikNoIleKisiSorgula(kisi, callback);
}
public static OMElement createSecurityHeader(String username, String password)
{
OMNamespaceImpl wsseNS = new OMNamespaceImpl(WSConstants.WSSE_NS, WSConstants.WSSE_PREFIX);
OMFactory factory = new SOAP11Factory();
OMElementImpl securityHeader;
OMElementImpl usernameTokenElement;
OMElementImpl usernameElement;
OMElementImpl passwordElement;
// create the Security header block
securityHeader = new OMElementImpl("Security", wsseNS, factory);
securityHeader.addAttribute("mustUnderstand", "1", null);
// nest the UsernameToken in the Security header
usernameTokenElement = new OMElementImpl(WSConstants.USERNAME_TOKEN_LN, wsseNS, securityHeader, factory);
// nest the Username and Password elements
usernameElement = new OMElementImpl(WSConstants.USERNAME_LN, wsseNS, usernameTokenElement, factory);
usernameElement.setText(username);
passwordElement = new OMElementImpl(WSConstants.PASSWORD_LN, wsseNS, usernameTokenElement, factory);
passwordElement.setText(password);
passwordElement.addAttribute(WSConstants.PASSWORD_TYPE_ATTR,
WSConstants.PASSWORD_TEXT, null);
return securityHeader;
}
我遇到了同样的问题(我在wso2 esb环境中使用axis2 web服务)
我通过提供额外的超时配置来解决此问题:
<parameter name="SO_TIMEOUT">some_integer_value</parameter>
<parameter name="CONNECTION_TIMEOUT">some_integer_value</parameter>
我使用值60000表示超时,因为我的web服务预计将使用DB执行多个操作。您将收到套接字读取超时错误。你确定你可以从你的客户那里访问给定的服务吗?我确定。通过soapui和从java生成的xml,它可以完美地工作。但java无法从客户端获得任何响应。
<parameter name="SO_TIMEOUT">some_integer_value</parameter>
<parameter name="CONNECTION_TIMEOUT">some_integer_value</parameter>
options.setProperty(HTTPConstants.SO_TIMEOUT, new Integer(timeOutInMilliSeconds));
options.setProperty(HTTPConstants.CONNECTION_TIMEOUT, new Integer(timeOutInMilliSeconds));