JBoss WildFly 13上的RESTful Web服务可通过浏览器和curl进行工作,但不能通过单元测试进行工作-404错误

时间:2018-08-24 14:47:44

标签: java web-services jboss resteasy junit5

我在JBoss WildFly 13.0.0.Final上部署了一个应用程序,作为在macOS High Sierra 10.13.6上的EE8上运行的EAR。从“应用程序”网页调用所有方法都可以正常工作。

我可以成功ping通“我的IP地址”,127.0.0.1和locahost:

  

ping 192.999.9.255 PING 192.999.1.255   (192.999.9.255):56个数据字节来自192.999.1.23的64个字节:icmp_seq = 0   ttl = 64时间= 0.067 ms从192.999.1.23开始的64个字节:icmp_seq = 1 ttl = 64   时间= 0.147毫秒,从192.99.1.23起为64个字节:icmp_seq = 2 ttl = 64时间= 0.098   毫秒

     

PING 127.0.0.1(127.0.0.1):56个数据字节64个字节来自127.0.0.1:   icmp_seq = 0 ttl = 64时间= 0.046 ms从127.0.0.1起64个字节:icmp_seq = 1   ttl = 64时间= 0.085 ms从127.0.0.1开始的64字节:icmp_seq = 2 ttl = 64   时间= 0.076 ms

     

PING本地主机(127.0.0.1):56个数据字节来自127.0.0.1的64个字节:   icmp_seq = 0 ttl = 64时间= 0.041 ms从127.0.0.1起64个字节:icmp_seq = 1   ttl = 64时间= 0.084 ms从127.0.0.1开始的64字节:icmp_seq = 2 ttl = 64   时间= 0.090毫秒

我的usr / hosts是标准的:

  

127.0.0.1本地主机

     

255.255.255.255广播主机

     

:: 1本地主机

     

fe80 :: 1%lo0本地主机

我可以访问其中一个Web服务并从curl中显示JSON:

MacBook-Pro:bin NOTiFY$ curl "http://localhost:8080/NOTiFYwell/notifywell/get-all-enumbers/"
[
  {
    "id": "5b6c5dbefac4f7105b3cca2e",
    "code": "E100",
    "name": "Curcumin (from turmeric)",
    "colour": "Yellow-orange",
    "status": "Approved in the EU.Approved in the US."
  },

并通过浏览器:

enter image description here

但是,当我运行JUnit 5测试时:

    @Test
    public final void test01GetListEnumbers() throws IOException {
        System.out.println(">>>>> test01GetListEnumbers .....");

        String url = "http://localhost:8080/NOTiFYwell/notifywell/get-all-enumbers/";
        System.out.println(">>>>> test01GetListEnumbers url = " + url);

        HttpGet httpGet = new HttpGet(url);
        httpGet.setHeader(CONTENT_TYPE, APPLICATION_JSON);

        //Execute and get the response.
        HttpClient httpClient = HttpClientBuilder.create().build();
        HttpResponse response = httpClient.execute(httpGet);

        System.out.println(">>>>> test01GetListEnumbers response getStatus = " + response.getStatusLine().getStatusCode());
        System.out.println(">>>>> test01GetListEnumbers response getEntity = " + EntityUtils.toString(response.getEntity()));

    }

我得到:

test01GetListEnumbers ..... test01GetListEnumbers url = http://localhost:8080/NOTiFYwell/notifywell/get-all-enumbers/ test01GetListEnumbers响应getStatus = 404 test01GetListEnumbers  响应getEntity =

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 404 Not Found</title>
</head>
<body><h2>HTTP ERROR 404</h2>
<p>Problem accessing /NOTiFYwell/notifywell/get-all-enumbers/. Reason:
<pre>    Not Found</pre></p><hr><a 
href="http://eclipse.org/jetty">Powered by Jetty:// 9.4.z-SNAPSHOT</a> 
<hr/>

</body>
</html>

在WireShark中,我看到:

  

3027 26.303256 127.0.0.1 127.0.0.1 HTTP 275 GET   / NOTiFYwell / notifywell / get-all-enumbers / HTTP / 1.1

     

3028 26.303279 127.0.0.1 127.0.0.1 TCP 56 8080→50922 [ACK] Seq = 1   Ack = 220胜利= 408064伦= 0 TSval = 635600988 TSecr = 635600988

     

3029 26.304989 127.0.0.1 127.0.0.1 HTTP 652 HTTP / 1.1 404未找到   (文字/ html)

我所有的JUnit测试都在我以前的MacBook Pro(2018年7月)和WildFly 12.0.0上运行,最终在EE8和macOS High Sierra 10.13.6上运行。我最近升级到了在EE8上运行的WildFly 13.0.0.Final。在这两种情况下,我访问Web服务的一系列单元测试都使用Apache HTTP Core 4.4.10,客户端4.5.6 JAR。

许多SO建议都无济于事。

1 个答案:

答案 0 :(得分:0)

@James R. Perkins 感谢您指出正确的方向。我停下了Wildfly 13,果然,在8080端口上我仍然有监听的声音

  

MacBook-Pro:bin NOTiFY $ sudo lsof -i:8080密码:COMMAND PID
  用户FD类型设备大小/关闭节点名称java 437   NOTiFY 163u IPv6 0x299d8c12df3e5311 0t0 TCP本地主机:http-alt   (听)

杀死了PID并再次运行我的JUnit测试,并且(如希望的那样)得到了

  

org.apache.http.conn.HttpHostConnectException:连接到   本地主机:8080 [本地主机/127.0.0.1,本地主机/ 0:0:0:0:0:0:0:0:1,   localhost / fe80:0:0:0:0:0:0:1%1]失败:连接被拒绝

重新启动WildFly 13并成功重新运行我的JUnit测试:

  

test01GetListEnumbers url = http://localhost:8080/NOTiFYwell/notifywell/get-all-enumbers/   test01GetListEnumbers响应getStatus = 200   test01GetListEnumbers响应getEntity = [{       “ id”:“ 5b6c5dbefac4f7105b3cca2e”,       “代码”:“ E100”,       “ name”:“姜黄素(来自姜黄)”,       “ colour”:“橙黄色”,       “ status”:“在欧盟批准。在美国批准。” }

仍然不确定Jetty 9.x来自何处。

这与在我使用“迁移助手”将所有内容从旧MacBook复制到新MacBook之后必须重新启动Mac相对应。码头似乎在重启时启动。会调查。