Java ApacheHTTP服务器背后的Glassfish服务器Web服务
嗨 我们开始使用J2EE创建应用程序。我们现在创建了一个Webservice并将其部署到Glassfish服务器。我们编写了一个apache代理规则,通过https://our.server.com/webservice-war(只有https端口对该服务器开放): 现在一切正常,但当我们转到ServiceEndpoint页面(自动生成)时,有一个指向WSDL页面的链接: http://our.server.com:8080/webservice-war/HostaliasSearchImplService?wsdl 这是非常错误的(Glassfish侦听端口8080)。而且https也改为http 任何人都知道我如何修复它,自动生成的链接是: https://our.server.com/webservice-war/HostaliasSearchImplService?wsdlJava ApacheHTTP服务器背后的Glassfish服务器Web服务,java,apache,jsf,Java,Apache,Jsf,嗨 我们开始使用J2EE创建应用程序。我们现在创建了一个Webservice并将其部署到Glassfish服务器。我们编写了一个apache代理规则,通过https://our.server.com/webservice-war(只有https端口对该服务器开放): 现在一切正常,但当我们转到ServiceEndpoint页面(自动生成)时,有一个指向WSDL页面的链接: http://our.server.com:8080/webservice-war/HostaliasSearchImplS
BR,Rene至于重写https->http,我不确定不使用mod_jk是否可能,请参阅 ,但也可以看到这一点 不过,一般来说,您需要配置Glassfish并设置http.proxyPort(也可能是http.proxyHost)。希望这应该反映在自动生成的WSDL URL中 以下是三种不同的方法: 1 使用asadmin(在Glassfish bin/目录中,运行
asadmin create-jvm-options "-Dhttp.proxyPort=80"
asadmin create-jvm-options "-Dhttp.proxyHost=our.server.com"
2
编辑domain.xml并在
元素下添加
<jvm-options>-Dhttp.proxyPort=80</jvm-options>
<jvm-options>-Dhttp.proxyHost=our.server.com</jvm-options>
找到了解决办法
Anonym给了我一个关于mod_jk的好提示。这里是完整的配置(对于RHEL5)
首先,下载apache的mod_jk模块:
放入modules目录/etc/httpd/modules并使其可执行:
chmod +x mod_jk-1.2.31-httpd-2.2.x.so
然后创建/etc/httpd/conf/workers.properties:
# Define 1 real worker using ajp13
worker.list=worker1
# Set properties for worker1 (ajp13)
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
端口8009是Glassfish jk连接器侦听的位置(我们稍后再讨论)
不,我们必须配置mod_jk,因此创建具有以下内容的文件:/etc/httpd/conf.d/mod_jk.conf:
LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.x.so
JkWorkersFile /etc/httpd/conf/workers.properties
# Where to put jk logs
JkLogFile /var/log/httpd/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel debug
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
# Send everything for context /atsi-war to worker named worker1 (ajp13)
JkMount /yourapp-war/* worker1
(这意味着从您的will bi重定向到Glassfish yourapp war应用程序上下文)
重要信息:如果您在apache上使用虚拟主机,则必须设置以下选项:
复印
用于虚拟服务器。说明:
如果此指令在中设置为“On”
一些虚拟服务器,从
全局服务器将被复制到
更准确地说,这是一个虚拟服务器
由JkMount或
卸载
现在我们必须在glassfish中创建jk连接器:
asadmin create-http-listener --listenerport 8009 --listeneraddress 0.0.0.0 --defaultvs server jk-connector
asadmin set configs.config.server-config.network-config.network-listeners.network-listener.jk-connector.jk-enabled=true
<> P>重启玻璃鱼,一切都正常工作。 < P>我发现了我认为是一个非常简单和优雅的方法来处理这个问题:使用Mod替代物。因为我们这个问题的人已经使用了Apache,而且它是内置的和简单的,我最喜欢这个方法。 我在我的一个Apache conf文件中放了一个类似于下面的块,并找到了joy:
<Location />
AddOutputFilterByType SUBSTITUTE text/xml
Substitute "s|http://internal:8080/foo|https://external/foo|ni"
</Location>
AddOutputFilterByType替换文本/xml
代替|http://internal:8080/foo|https://external/foo|倪“
设置
server-config.network-config.protocols.protocol.http-listener-1.http.server-name=MyHost:80
在GlassFish服务器上,开源版本3.1.2.2(版本5)解决了我的问题。不幸的是,它没有解决问题。仍然是错误的链接。也许我可以在GlassFish上创建一个重写规则。我还不知道。
<Location />
AddOutputFilterByType SUBSTITUTE text/xml
Substitute "s|http://internal:8080/foo|https://external/foo|ni"
</Location>
server-config.network-config.protocols.protocol.http-listener-1.http.server-name=MyHost:80