我使用Netbeans创建部署在Glashfish上的Web客户端和Web服务(在调试模式下)。
我在Web服务中添加了一些断点但是当我启动Web客户端(在调试中)并触发对Web服务方法的调用时,它永远不会在我设置的断点处停止。
我确实得到了正确的SOAP响应,因此我知道Web服务的代码已经执行。 有没有办法在启动Web客户端时调试Web服务?
现在我在Web服务中使用Main类来模拟客户端或不使用复杂类型的方法,我可以使用'测试Web服务'来自Netbeans。
答案 0 :(得分:1)
一些想法:
在调试模式下安装SOAP-UI后启动glassfish。部署您的Web服务。创建一个新的SOAP-UI项目并将其指向您部署的Web服务的WSDL文件。
警告:SOAP-UI不是很好但非常好。
导入WSDL后,打开SOAP项目节点,直到看到Web服务的操作。
你应该看到这样的事情:
展开操作并填写请求的缺失部分。缺失的值将以?表示?在XML请求中,它们应该在初始请求中看起来像这样:
<ecol:accountTotalDue>
<!--Optional:-->
<acc:AccountKeyInfo>
<!--Optional:-->
<acc:Client_Ref>?</acc:Client_Ref>
<!--Optional:-->
<acc:Debt_ID>?</acc:Debt_ID>
</acc:AccountKeyInfo>
<!--Optional:-->
<acc:Total_Due>?</acc:Total_Due>
</ecol:accountTotalDue>
您可以像这样硬编码:
<ecol:accountTotalDue>
<!--Optional:-->
<acc:AccountKeyInfo>
<!--Optional:-->
<acc:Client_Ref>12834756183754</acc:Client_Ref>
<!--Optional:-->
<acc:Debt_ID>?</acc:Debt_ID>
</acc:AccountKeyInfo>
<!--Optional:-->
<acc:Total_Due>10000000.00</acc:Total_Due>
</ecol:accountTotalDue>
请注意,您也可以编写脚本,例如我的Web服务需要在特殊标题部分中使用GUUID和消息日期时间,因此我执行以下操作:
<irix:MsgReqHdr>
<irix:MsgGUID>${=java.util.UUID.randomUUID()}</irix:MsgGUID>
<!--Optional:-->
<irix:MsgDateTime>${=javax.xml.datatype.DatatypeFactory.newInstance().newXMLGregorianCalendar(GregorianCalendar.getInstance())}</irix:MsgDateTime>
</irix:MsgReqHdr>
您可以设置不同的请求来测试不同的方案。如果您正在进行认真的Web服务开发,那真的是必须的。它也做REST。
这对我来说通常比其他任何事都好。我用JBoss,Glassfish,Karaf,Fuse和其他服务器完成了这项工作,因此它可以工作。