Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SOAPUI java非法状态例外方案';https';未注册_Java_Soap_Soapui - Fatal编程技术网

SOAPUI java非法状态例外方案';https';未注册

SOAPUI java非法状态例外方案';https';未注册,java,soap,soapui,Java,Soap,Soapui,我正在尝试使用soapui测试与webservice的连接。通过将WSDL导入soapUI创建项目,并在SSL seeting下设置密钥库和密钥库密码 然而,当我提交请求时,我得到以下错误。不知道如何注册“https”。你能帮忙吗 java.lang.IllegalStateException: Scheme 'https' not registered 您可以尝试使用下面的代码在测试用例中创建groovy测试步骤,该代码创建SSLContext并注册https方案。。。但是,我不确定这是否能

我正在尝试使用soapui测试与webservice的连接。通过将WSDL导入soapUI创建项目,并在SSL seeting下设置密钥库和密钥库密码

然而,当我提交请求时,我得到以下错误。不知道如何注册“https”。你能帮忙吗

java.lang.IllegalStateException: Scheme 'https' not registered

您可以尝试使用下面的代码在测试用例中创建groovy测试步骤,该代码创建SSLContext并注册https方案。。。但是,我不确定这是否能在您的环境中起作用,因为在某些情况下,
java.lang.IllegalStateException:Scheme'https'not registered
是网络中的一个问题(可能是您在代理之后等)。希望这有帮助

import java.io.IOException;
import java.io.FileInputStream;
import java.security.NoSuchAlgorithmException;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.scheme.SchemeSocketFactory;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.ClientParamsStack;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.DefaultedHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.entity.InputStreamEntity;
import java.security.SecureRandom;
import java.security.KeyStore;
import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.TrustManagerFactory;


HttpClient httpclient = new DefaultHttpClient();

// init SSL

// load your keystore
KeyStore keyStore = KeyStore.getInstance("jks"); 
keyStore.load(new FileInputStream("path_to_your_keystore"), "your_keystore_password".toCharArray());
// create keystore manager
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509");
keyManagerFactory.init(keyStore, password.toCharArray());

// load your truststore
KeyStore trustStore = KeyStore.getInstance("jks");
trustStore.load(new FileInputStream("path_to_your_truststore"), "your_trustore_password".toCharArray());
// create truststore manager
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance("SunX509");
trustManagerFactory.init(trustStore);

// create the ssl context
SSLContext context = SSLContext.getInstance("SSL");
context.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), new SecureRandom());
SSLSocketFactory ssf = new SSLSocketFactory(ctx);

//register https protocol in httpclient's scheme registry
ClientConnectionManager ccm = httpclient.getConnectionManager();
SchemeRegistry sr = ccm.getSchemeRegistry();
sr.register(new Scheme("https", 443, ssf));

// create the request
HttpPost post = new HttpPost("https://your_service_endpoint_url")
def bais = new ByteArrayInputStream("<SOAP:Envelope>...your_xml</SOAP:Envelope>".getBytes("UTF-8"))
def reqEntity = new InputStreamEntity(bais, bais.available());
reqEntity.setContentType("application/xml");
post.setEntity(reqEntity);

// make the post and get the response
ResponseHandler responseHandler = new BasicResponseHandler();
def responseBody = httpclient.execute(post, responseHandler);
log.info responseBody;
import java.io.IOException;
导入java.io.FileInputStream;
导入java.security.NoSuchAlgorithmException;
导入javax.net.ssl.SSLContext;
导入javax.net.ssl.TrustManager;
导入javax.net.ssl.X509TrustManager;
导入java.security.cert.CertificateException;
导入java.security.cert.x509证书;
导入org.apache.http.client.ClientProtocolException;
导入org.apache.http.client.HttpClient;
导入org.apache.http.client.ResponseHandler;
导入org.apache.http.client.methods.HttpPost;
导入org.apache.http.conn.ClientConnectionManager;
导入org.apache.http.conn.scheme.scheme;
导入org.apache.http.conn.scheme.SchemeRegistry;
导入org.apache.http.conn.scheme.SchemeSocketFactory;
导入org.apache.http.conn.ssl.SSLSocketFactory;
导入org.apache.http.impl.client.BasicResponseHandler;
导入org.apache.http.impl.client.ClientParamsStack;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.apache.http.params.DefaultedHttpParams;
导入org.apache.http.params.HttpParams;
导入org.apache.http.entity.InputStreamEntity;
导入java.security.SecureRandom;
导入java.security.KeyStore;
导入javax.net.ssl.KeyManager;
导入javax.net.ssl.KeyManagerFactory;
导入javax.net.ssl.TrustManagerFactory;
HttpClient HttpClient=新的DefaultHttpClient();
//初始化SSL
//加载你的密钥库
KeyStore KeyStore=KeyStore.getInstance(“jks”);
load(新文件输入流(“路径到您的密钥库”),“您的密钥库密码”.toCharArray());
//创建密钥库管理器
KeyManagerFactory KeyManagerFactory=KeyManagerFactory.getInstance(“SunX509”);
init(keyStore,password.toCharArray());
//加载您的信任库
keystoretruststore=KeyStore.getInstance(“jks”);
load(新文件输入流(“路径到您的信任库”),“您的信任库密码”.toCharArray());
//创建信任库管理器
TrustManagerFactory TrustManagerFactory=TrustManagerFactory.getInstance(“SunX509”);
init(信任库);
//创建ssl上下文
SSLContext context=SSLContext.getInstance(“SSL”);
init(keyManagerFactory.GetKeyManager(),trustManagerFactory.GetTrustManager(),new SecureRandom());
SSLSocketFactory ssf=新SSLSocketFactory(ctx);
//在httpclient的方案注册表中注册https协议
ClientConnectionManager ccm=httpclient.getConnectionManager();
SchemeRegistry sr=ccm.getSchemeRegistry();
高级注册(新方案(“https”,443,ssf));
//创建请求
HttpPost=新的HttpPost(“https://your_service_endpoint_url")
def bais=newbytearrayinputstream(“…您的xml.getBytes”(“UTF-8”))
def REQUENTITY=新输入流实体(bais,bais.available());
requentity.setContentType(“应用程序/xml”);
post.setEntity(reqEntity);
//发帖子并得到回复
ResponseHandler ResponseHandler=新BasicResponseHandler();
def responseBody=httpclient.execute(post,responseHandler);
log.info响应库;

或者,您可以使用
SOAPUI 5.1.3
version,它似乎没有这个问题。

您是否使用默认的https端口?您使用的是什么版本的soapui?是的,我使用的是解除UALT端口。没有在任何地方设置它。我正在使用SoapUI 5.0.0。我给你一个可能的解决方案作为答案。。。但是我不确定这是否可行,试试看:)。是的,它最终成为了防火墙。需要通过中间服务器。感谢您的回答,而且代码片段对于想要运行qucick测试的人来说看起来很不错。@albciff我也有同样的问题,当然不是由防火墙引起的,但我不知道“groovy testStep”,我只是有一条soap消息,如何在soap UI中注册https?@user1169587“我不知道groovy testStep”是什么意思?我不知道您是否在问这个问题,但是您可以在测试用例中添加一个名为
groovy
的特殊测试步骤,在这个测试步骤中,您可以根据答案添加代码。@albciff在我将soapUI升级到5.1.3之后,现在没有这个问题。@user1169587是的,谢谢。我更新我的答案