如何在 IntelliJ 中调试 Web 服务?

Posted

技术标签:

【中文标题】如何在 IntelliJ 中调试 Web 服务?【英文标题】:how to debug a web service in IntelliJ? 【发布时间】:2019-03-18 20:29:51 【问题描述】:

如果我做错了什么请纠正我:

    我用 Java 创建了一个 Web 服务 (WSDL),它有一个方法 TestCall()。 我还创建了一个网站http://testwebsite:8000/abc/index.html,该网站正在调用步骤1中的网络服务。 我在 IntelliJ 中为它创建了一个远程调试。我把 testwebsite 作为主机,8000 作为端口号。 一旦我转到http://testwebsite:8000/abc/index.html 并单击TestCall(),它并没有进入 IntelliJ 中的断点。当我尝试远程调试 Web 服务时,出现错误:

    无法打开调试器端口 (testwesite:8000),握手失败,连接永久关闭。

谁能告诉我我错过了哪些步骤?谢谢

【问题讨论】:

调试器端口应该不是 8000,如果我理解正确的话。 【参考方案1】:

当您需要远程调试应用程序时,请转到 IntelliJ 中的设置 (Run->Edit configurations)。

现在单击+ 符号并添加Remote 配置。它告诉你命令行添加到你在远程机器上启动的 JVM 的启动中。它会是这样的:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 用于 jvm 5-8。

现在您可以使用这些额外的命令行选项在服务器上启动远程 Web 服务。然后在 IntelliJ 中启动此配置。它会告诉你Connected to target VM, address: 'server name', transport: 'socket'。您可以像本地调试一样添加断点。

如您所见:远程调试不使用 web 端口,而是专门为调试目的而打开的不同端口。如果服务器和您的工作站之间有防火墙,请选择一个打开的端口,或者打开防火墙端口(如果可能)。

【讨论】:

如果我不使用远程调试器,只需要对 Web 服务进行单元测试,那么正确的方法是什么?创建一个简单的控制台应用程序并调用 Web 服务中的方法? @msProgram:如果你需要单元测试,你应该看看 jUnit 或 TestNG。我更喜欢带有 Mockito 的 jUnit。在单元测试中,您可以测试类本身,而无需围绕它的整个服务器。但请注意:单元测试应该只测试一个类:而不是依赖类。这些应该单独模拟和测试。如果您想完全正确,可以查看 TDD(测试驱动开发):您首先创建一个测试,然后再创建一个类。单元测试通常作为 maven 构建的一部分运行。 谢谢。那应该行得通。我实际上正在使用 Maven 构建。

以上是关于如何在 IntelliJ 中调试 Web 服务?的主要内容,如果未能解决你的问题,请参考以下文章

intellij idea 调试web项目只能调试一次,第二次不能进入断点

IntelliJ IDEA 中的 JSP 调试

如何在Intellij IDEA 2018.2中调试GWT 2.8.1作为java代码而不是java脚本

使用 Intellij 在远程服务器上部署/调试 java 代码

在 IntelliJ 中,如何调试 Maven 测试目标?

Intellij IDEA中如何配置Tomcat服务器