Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为从Axis2 Webservice创建的客户端对象定义toString()方法_Java_Web Services_Swing_Netbeans_Axis2 - Fatal编程技术网

Java 如何为从Axis2 Webservice创建的客户端对象定义toString()方法

Java 如何为从Axis2 Webservice创建的客户端对象定义toString()方法,java,web-services,swing,netbeans,axis2,Java,Web Services,Swing,Netbeans,Axis2,我对网络服务有点陌生。我正在使用Netbeans 7.0和Axis2。我有Java服务器端代码和Java客户端。为了简化这个过程,我将使用一个非常简单的示例 我有一个WorkSite类,它有workSiteId、workSiteName和refCode字段,每个字段都有一个getter和setter。在服务器端,该类还有一个重写的toString()方法,该方法只返回工作站点名。因此,如果我要制作一个带有JComboBox的GUI服务器端,并开始向其中添加工作站点对象,那么每个对象的工作站点名称

我对网络服务有点陌生。我正在使用Netbeans 7.0和Axis2。我有Java服务器端代码和Java客户端。为了简化这个过程,我将使用一个非常简单的示例

我有一个WorkSite类,它有workSiteId、workSiteName和refCode字段,每个字段都有一个getter和setter。在服务器端,该类还有一个重写的toString()方法,该方法只返回工作站点名。因此,如果我要制作一个带有JComboBox的GUI服务器端,并开始向其中添加工作站点对象,那么每个对象的工作站点名称将显示在JComboBox中

所以我基本上创建了一个web方法,比如“getWorkSiteList”,它从数据库中查询,创建工作站点对象并将它们添加到数组中,然后返回数组。我可以毫无问题地使用工作站点对象,除了当我查看Netbeans中的客户端Jax WS“生成的源代码”时,getter和setter都在那里,但toString()方法不在那里。因此,当我将我的工作站点对象从数组中取出并放入JComboBox时,组合框会为每个项目显示非常难看的内容,如“examplepackagename.WorkSite.a6d35”,而不是显示好的工作站点名称

我想我真正的问题是,我在Netbeans的客户端上有一个自动生成的WorkSite.java文件,它没有我的toString()方法(这称为骨架,对吧?);有没有办法让它包含在服务器端类上定义的toString()方法?如果不是,那么编辑自动生成的类(同样,我认为这被称为骨架,对吗?)并添加我的toString()方法是否安全?如果我在客户端编辑自动生成的类,它会在重建时被覆盖吗


谢谢你的帮助!我希望那不是长篇大论;我只是不知道所有的术语,无法用简洁的方式解释它。

实现这一点的方法是修改Axis2代码生成器的模板。如果查看上的体系结构图,您将看到代码生成器生成XML格式的中间数据结构,然后使用XSLT和一组特定于语言的模板来生成代码。如果希望代码包含额外的
toString()
方法,那么显而易见的方法是修改模板以包含对这些方法的支持

注意事项:

  • 您需要了解生成器的体系结构和实现,以及它使用的技术:特别是XSLT

  • 我不能保证中间XML文件中有足够的信息来生成所需的方法。(我想会有,但我还没看。)


  • 正如我在一篇评论中提到的,我通过使用一个子网站类对示例网站类进行子类化来解决这个问题,该子网站类只定义一个override toString()方法,该方法返回super.getWorkSiteName.getValue()

    因此,我有一个从webservice调用返回的工作站点对象列表,我只是对其进行迭代,对于列表中的每个工作站点对象,我创建一个子工作站点对象并将其添加到JComboBox。现在,当运行应用程序时,工作站点名称显示在JComboBox中,而不是从自动生成的类中获得的丑陋的toString()值“examplepackagename.WorkSite.xxxxx”


    如果有人有任何建议,我当然愿意接受以更好的方式这样做的建议;或者如果有人对Stephen C关于编辑生成器XSLT模板的建议有更多信息。

    好信息Stephen C,感谢您的回复。我环顾了整个网络,试图找到更多关于这方面的信息,比如模板在哪里,以及为Java客户机编辑哪个模板,但没有找到真正有用的信息。我也在我的开发盒的某个地方寻找了这些模板,但结果是空的。你有什么想法吗?我想可能不太理想的方法是对自动生成的客户端类进行子类化,并在子类中定义toString()方法。然后,当我获得一个工作站点对象数组时,我可以从定义了toString()方法的位置创建子工作站点对象,将这些对象赋给JComboBox,使其显示我想要的名称,然后如果我需要将子工作站点对象发送回服务器,我可以将其转换回自动生成的工作站点类。你认为这种方法有什么问题吗?(除了表面上的noobish)是的,有一个问题。如何说服客户端代码使用您的子类而不是生成的类来具体化实例?因此,我的webmethod返回一个列表,我只是迭代这个列表,然后为每个项目创建一个子站点对象,然后将其添加到GUI的JComboBox中。