Criei um webservice utilizando a tecnologia jetty embedded consigo consumir os métodos através do SoapUI via http e https, porém ao gerar classes através do netbeans não consigo consumir métodos https:
Jé tentei diversos tutoriais e escrevi dúvidas em alguns blogs, e resolvi escrever no fórum, quem puder auxiliar agradeço
cenário:
jetty 6.1
jdk 1.6
apache 2.2.3
Classe WSTest
package br.com.teste.ws;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService(
portName = "WSTest",
targetNamespace = "http://webservice.teste.com.br",
name = "WSTest"
)
public class WSTest {
@WebMethod(operationName="sayHello")
public String sayHello(@WebParam(name="name") String name){
return "Hello " + name;
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>
JavaWEB
</display-name>
<listener>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description>WS de Teste</description>
<display-name>WSTest</display-name>
<servlet-name>WSTest</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-name>WSTest</servlet-name>
<url-pattern>/WSTest</url-pattern>
</servlet-mapping>
</web-app>
sun-jaxws.xml
<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0">
<endpoint name="WSTest"
implementation="br.com.teste.ws.WSTest"
url-pattern="/WSTest">
</endpoint>
</endpoints>
Gerei o war através do eclipse.
Classe Server
....
///// Inicialia objeto Server
webServer = new Server();
///// Seta Connector
webConnector = new SelectChannelConnector();
webConnector.setPort(webServerPort);
setPort(webServerPort);
///// Seta Conector HTTPS
sslConnector = new SslSocketConnector();
sslConnector.setKeystore(KEYSTORE);
sslConnector.setTruststore(KEYSTORE);
sslConnector.setPassword(KEYPASSWORD);
sslConnector.setKeyPassword(KEYPASSWORD);
sslConnector.setTrustPassword(KEYPASSWORD);
sslConnector.setMaxIdleTime(30000);
sslConnector.setPort(9443);
webServer.setConnectors(new Connector[]{webConnector,sslConnector});
///// Seta stackTrace para false
System.setProperty("com.sun.xml.ws.fault.SOAPFaultBuilder.disableCaptureStackTrace","true");
log.putLog(ILog.PROCESS_CRITICAL, this, "Instanciando Application Context WAR["+warContextPath+"]", null);
///// Seta webAppContext
webAppContext = new WebAppContext();
webAppContext.setContextPath(warContextPath);
webAppContext.setWar(warPath);
log.putLog(ILog.PROCESS_CRITICAL, this, "Instanciando WebApp Class Loader", null);
///// Inicializa WebAppClassLoader
loader = new WebAppClassLoader(Thread.currentThread().getContextClassLoader(),webAppContext);
webAppContext.setClassLoader(loader);
log.putLog(ILog.PROCESS_CRITICAL, this, "Instanciando Pool de handlers", null);
///// Seta handlers
handlers = new HandlerCollection();
handlers.setHandlers(new Handler[]{new br.com.comunika.wsapp.webserver.Handler(),webAppContext});
webServer.setHandler(handlers);
webServer.setStopAtShutdown(true);
log.putLog(ILog.PROCESS_CRITICAL, this, "Inicializando Webserver / Context / ...", null);
try {
webServer.start();
} catch (Throwable t) {
log.putLog(ILog.PROCESS_CRITICAL, this, "EXCEPTION inicializando WEBSERVER", t);
}
....
Configuração apache httpd.conf:
<VirtualHost 172.16.40.8:80>
# ...
ProxyRequests Off
# Remember to turn the next line off if you are proxying to a NameVirtualHost
ProxyPreserveHost On
ServerName webservice.teste.com.br
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://172.16.40.8:9000/
ProxyPassReverse / http://172.16.40.8:9000/
SSLEngine on
SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
ErrorLog logs/ws-error_log
CustomLog logs/ws-access_log common
</VirtualHost>
################ Webservice_V3: 443
<VirtualHost 172.16.40.8:443>
# ...
ProxyRequests Off
# Remember to turn the next line off if you are proxying to a NameVirtualHost
ProxyPreserveHost On
ServerName webservice.teste.com.br
SSLProxyEngine On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
# this option is mandatory to force apache to forward the client cert data to tomcat
SSLOptions +ExportCertData
SSLEngine on
SSLVerifyClient optional
SSLVerifyDepth 2
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/httpd/conf/ssl.crt/webservice_teste_com_br.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/webservice_teste_com_br.key
SSLCACertificateFile /etc/httpd/conf/ssl.crt/webservice_teste_com_br.ca-bundle
ProxyPass / https://172.16.40.8:9443/
ProxyPassReverse / https://172.16.40.8:9443/
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
ErrorLog logs/webservice-error_log
CustomLog logs/webservice-access_log common
</VirtualHost>
Atenciosamente