【问题标题】:How to dynamically autogenerate Java Beans from WSDL?如何从 WSDL 动态自动生成 Java Bean?
【发布时间】:2012-05-19 02:06:08
【问题描述】:

我想开发一个应用程序来测试 Web 服务,它将使用提供的 WSDL 中的参数自动生成 JSF 表单。

WSDL URL 由用户提供,在解析之前我不知道操作的名称。我希望应用程序通过解析的操作及其参数,并自动生成适当的 Java Bean,我将使用它来生成 JSF 表单。

我已经测试过 CXF 和 JAX-WS,但我认为他们需要在生成 Java bean 之前知道操作名称。如何为任何 WSDL 透明地生成 Java Bean?手动运行wsdl2java 不是解决方案。

【问题讨论】:

  • 从程序内部运行 wsdl2java 怎么样?
  • AFAIK, wsdl2java 生成带有操作名称的 *.java 文件,我必须以某种方式动态编译和导入。在创建 bean 之前不知道他们的名字,我该怎么做?

标签: java wsdl jax-ws cxf wsdl2java


【解决方案1】:

如果您正在使用 Maven(并且您应该使用),您可以使用 CXF 代码生成插件从 WSDL 生成类。我的博客上有一个例子;

http://qwerky-qwerky.blogspot.co.uk/2011/12/programming-without-programming-1.html

【讨论】:

    【解决方案2】:

    CXF 确实有一个“DynamicClient”(参见:http://cxf.apache.org/javadoc/latest-2.6.x/org/apache/cxf/jaxws/endpoint/dynamic/JaxWsDynamicClientFactory.html)可用于此目的。它解析 wsdl,生成 JAXB 对象并编译它们,并返回一个客户端,该客户端可用于获取与它们相关的操作和类型等。

    【讨论】:

    • 我使用过 CXF DynamicClient 并且效果很好:JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); Client c = dcf.createClient(url); Endpoint e = c.getEndpoint(); ServiceInfo si = endpoint.getService().getServiceInfos().get(0); BindingInfo bi = si.getBindings().get(0); BindingOperationInfo boi : bi.getOperations().get(0);
    • 我尝试了上面给出的代码,但没有工作。它抱怨 .get(0) 用于 BindingInfo 和 BindingOperationInfo。你能把工作代码放在这里吗?谢谢
    猜你喜欢
    • 2019-03-03
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多