JBoss HTTP Transport 不是 Vagrant 的端口转发

标签 jboss virtualbox vagrant portforwarding

问题 JBoss 无法使用 Vagrant/VirtualBox 端口转发其用于 Web 服务端点的 http 传输。

背景

我们正在使用 Vagrant 托管带有 WSO2 ESB、JBoss EAP 和 Oracle XE 的 centOS 机器。我已经在 Vagrantfile 中设置了端口转发:

Vagrant 文件

config.vm.network :forwarded_port, guest: 9994, host: 9994 # JBOSS Admin Console 
config.vm.network :forwarded_port, guest: 8084, host: 8084 # JBOSS Endpoints
config.vm.network :forwarded_port, guest: 10003, host: 10003 # JBOSS Maven Deploy
config.vm.network :forwarded_port, guest: 9443, host: 9443 # WSO2 Console admin/admin
config.vm.network :forwarded_port, guest: 8243, host: 8243 # WSO2 Endpoints
config.vm.network :forwarded_port, guest: 8280, host: 8280 # WSO2 Endpoints
config.vm.network :forwarded_port, guest: 1521, host: 1521 # Oracle XE

JBoss standalone.xml

<interfaces>
        <interface name="management">
            <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
        </interface>
        <interface name="public">
            <inet-address value="${jboss.bind.address:127.0.0.1}"/>
        </interface>
        <interface name="unsecure">
            <inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"/>
        </interface>
    </interfaces>

    <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:4}">
        <socket-binding name="management-native" interface="management" port="${jboss.management.native.port:9999}"/>
        <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
        <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9443}"/>
        <socket-binding name="ajp" port="8009"/>
        <socket-binding name="http" port="8080"/>
        <socket-binding name="https" port="8443"/>
        <socket-binding name="jgroups-mping" port="0" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45700"/>
        <socket-binding name="jgroups-tcp" port="7600"/>
        <socket-binding name="jgroups-tcp-fd" port="57600"/>
        <socket-binding name="jgroups-udp" port="55200" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45688"/>
        <socket-binding name="jgroups-udp-fd" port="54200"/>
        <socket-binding name="modcluster" port="0" multicast-address="224.0.1.105" multicast-port="23364"/>
        <socket-binding name="remoting" port="4447"/>
        <socket-binding name="txn-recovery-environment" port="4712"/>
        <socket-binding name="txn-status-manager" port="4713"/>
        <outbound-socket-binding name="mail-smtp">
            <remote-destination host="localhost" port="25"/>
        </outbound-socket-binding>
    </socket-binding-group>

除了端口 8084 之外,我可以从主机系统完美访问所有内容。我可以 curl 虚拟机中的端点,并且 WSDL 正确托管在 guest 虚拟机中。

我尝试过的事情

  • 我已尝试仅更改 Vagrantfile 中的主机端口 - 相同的结果
  • 我已经尝试更改 JBoss Standalone xml 中的端口,然后更改 Vagrantfile 中的 guest 和主机端口 - 相同的结果
  • 我已经尝试切换到使用 Vagrant 的专用网络配置而不是 NAT 端口转发 - 相同的结果

由于我上面的测试,我觉得我已经排除了 Vagrant/Virtual Box 的问题。我认为这与 JBoss 中有关 http 传输的配置有关。

有什么想法吗?

最佳答案

经过大量研究,我找到了解决方案。这是原始的网络服务子系统:

<subsystem xmlns="urn:jboss:domain:webservices:1.1">
        <modify-wsdl-address>true</modify-wsdl-address>
        <wsdl-host>${jboss.bind.address:127.0.0.1}</wsdl-host>
        <endpoint-config name="Standard-Endpoint-Config"/>
        <endpoint-config name="Recording-Endpoint-Config">
            <pre-handler-chain name="recording-handlers" protocol-bindings="##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM">
                <handler name="RecordingHandler" class="org.jboss.ws.common.invocation.RecordingServerHandler"/>
            </pre-handler-chain>
        </endpoint-config>
</subsystem>

我在这里找到一篇文章https://docs.jboss.org/author/display/JBWS/Advanced+User+Guide?_sscc=t其中描述了服务器配置选项。通过进行以下更改,我解决了我的问题:

<subsystem xmlns="urn:jboss:domain:webservices:1.1">
        <modify-wsdl-address>true</modify-wsdl-address>
        <wsdl-host>localhost</wsdl-host>
        <wsdl-port>8084</wsdl-port>
        <endpoint-config name="Standard-Endpoint-Config"/>
        <endpoint-config name="Recording-Endpoint-Config">
            <pre-handler-chain name="recording-handlers" protocol-bindings="##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM">
                <handler name="RecordingHandler" class="org.jboss.ws.common.invocation.RecordingServerHandler"/>
            </pre-handler-chain>
        </endpoint-config>
</subsystem>

我基本上只是将 wsdl-host 更改为 localhost,并添加了 8084 的 wsdl-port。我希望这对其他人有帮助!

关于JBoss HTTP Transport 不是 Vagrant 的端口转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23408373/

相关文章:

Docker + MariaDB 连接

ubuntu - Ansible 无法找到 requirements.txt

ansible - 如何将ansible变量传递给vagrant

java - 无法在 java 中为 Web 服务创建客户端

java - 由于部署目录无法访问,Keycloak 启动时扫描失败 :/opt/jboss/keycloak/standalone/deployments

laravel - 如何将Homestead/VM从C盘运行移至F盘?

amazon-ec2 - 将 Amazon EC2 AMI 转换为虚拟盒或 Vagrant 盒

windows - Vagrant shell provisioner 在 Mac 主机上失败但在 Windows 主机上工作

java - JBoss 模块的 module.xml 示例给出了解析错误

java - 持久性 jar 的问题