java - 如何在运行时从 Java 代码中获取 server.xml 中配置的 HTTP 和 HTTPS 端口号

标签 java apache web-services tomcat cxf

在我们的项目中,我们使用 Apache CXF 框架实现了 SOAP 网络服务。客户端过去常常请求服务器执行某些命令。请求由主机、端口和用于连接的协议(protocol)组成。如果客户端使用 HTTPS 配置的端口号并将协议(protocol)指定为 HTTP,那么我们会收到连接拒绝 - 套接字异常。但是,我需要抛出一条正确的错误消息,例如“无法使用 http 协议(protocol)连接到端口为“ABC”的主机“XYZ””。为此,我需要在运行时从 tomcat server.xml 文件中获取配置的 http 和 https 端口号,然后将其与我的请求参数进行比较。

有人帮我找回吗?

最佳答案

您始终可以解析 tomcat 的 server.xml 文件并获取端口值:

  public static Integer getTomcatPortFromConfigXml(File serverXml) {
   Integer port;
   try {
      DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
      domFactory.setNamespaceAware(true); // never forget this!
      DocumentBuilder builder = domFactory.newDocumentBuilder();
      Document doc = builder.parse(serverXml);
      XPathFactory factory = XPathFactory.newInstance();
      XPath xpath = factory.newXPath();
      XPathExpression expr = xpath.compile
        ("/Server/Service[@name='Catalina']/Connector[count(@scheme)=0]/@port[1]");
      String result = (String) expr.evaluate(doc, XPathConstants.STRING);
      port =  result != null && result.length() > 0 ? Integer.valueOf(result) : null;
   } catch (Exception e) {
     port = null;
   }
   return port;
}

以上代码应该让您从 server.xml 获取 HTTP 端口。对于 HTTPS 端口,必须将 XPathExpression 修改为

XPathExpression expr = xpath.compile
            ("/Server/Service[@name='Catalina']/Connector[@scheme='https']/@port[1]");

请注意,上面的代码片段是基于 server.xml 是标准 tomcat 的服务器文件的假设,其中服务名称定义为“Catalina”。以下是一个标准的 server.xml 文件:

<Server>
    <Service name="Catalina">
        <Connector port="8080">
            #...
        </Connector>
    </Service>
</Server>

引用:Code link

关于java - 如何在运行时从 Java 代码中获取 server.xml 中配置的 HTTP 和 HTTPS 端口号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25376841/

相关文章:

java - 使用 PrintWriter 打印字符串

java - 如何在java中检索和存储 map 的单个元素

php - 我无法通过本地 phpmyadmin 访问远程 mysql 服务器

ruby-on-rails - 如何防止 Rails 中的浏览器页面缓存

java - JAXWS 客户端基本身份验证

java - 将JForm的Controls的数据显示到JTable中

apache - 重定向来自特定域的所有请求

php - 如何在 Wordpress 中使用 XML-RPC 获取帖子?

web-services - 使用 REST API 和 SugarCRM 将目标添加到目标列表

java - 运行 mvn Integration-test 不会运行 robotsframework 测试用例