Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.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
Java ApacheHTTP服务器背后的Glassfish服务器Web服务_Java_Apache_Jsf - Fatal编程技术网

Java ApacheHTTP服务器背后的Glassfish服务器Web服务

Java 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

嗨 我们开始使用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?wsdl


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