【问题标题】:Not able to generate the stubs/java skeletons from the WSDL无法从 WSDL 生成存根/java 骨架
【发布时间】:2011-10-13 22:36:59
【问题描述】:

我已经编写了一个 WSDL 来生成存根和骨架,但是我的骨架没有在 Eclipse 中生成。我正在使用 Helios 版本的 Eclipse。
谁能说出 WSDL 的问题是什么?

我想使用 Axis 2。我也尝试使用 wsdl2java 生成骨架,但它在生成的类中产生了编译问题。我无法在此处附加文件,因此我将其粘贴在这里。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:impl="http://DefaultNamespace"
      xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:apachesoap="http://xml.apache.org/xml-soap"
      xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      name="Test" targetNamespace="http://DefaultNamespace"> 
      <wsdl:types>
        <xsd:schema elementFormDefault="qualified"
          targetNamespace="http://DefaultNamespace" xmlns="http://www.w3.org/2001/XMLSchema">
          <import namespace="http://xml.apache.org/xml-soap" />
          <xsd:element name="serviceMethod">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="vo" type="impl:MyVo" />
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
          <xsd:complexType name="MyVo">
            <xsd:sequence>
              <xsd:element name="name" nillable="false" type="xsd:string" />
              <xsd:element name="params" nillable="true"
                type="apachesoap:Map" />
            </xsd:sequence>
          </xsd:complexType>
          <xsd:element name="serviceMethodResponse">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="serviceMethodReturn" type="impl:MyVo" />
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
        </xsd:schema>
        <xsd:schema elementFormDefault="qualified"
          targetNamespace="http://xml.apache.org/xml-soap" xmlns="http://www.w3.org/2001/XMLSchema">
          <import namespace="http://DefaultNamespace" />
          <xsd:complexType name="mapItem">
            <xsd:sequence>
              <xsd:element name="key" nillable="true" type="xsd:anyType" />
              <xsd:element name="value" nillable="true" type="xsd:anyType" />
            </xsd:sequence>
          </xsd:complexType>
          <xsd:complexType name="Map">
            <xsd:sequence>
              <xsd:element maxOccurs="unbounded" minOccurs="0"
                name="item" type="apachesoap:mapItem" />
            </xsd:sequence>
          </xsd:complexType>
        </xsd:schema>
      </wsdl:types>
      <wsdl:message name="serviceMethodRequest">
        <wsdl:part element="impl:serviceMethod" name="parameters" />
      </wsdl:message>
      <wsdl:message name="serviceMethodResponse">
        <wsdl:part element="impl:serviceMethodResponse" name="parameters" />
      </wsdl:message>
      <wsdl:portType name="Test">
        <wsdl:operation name="serviceMethod">
          <wsdl:input message="impl:serviceMethodRequest" name="serviceMethodRequest" />
          <wsdl:output message="impl:serviceMethodResponse" name="serviceMethodResponse" />
        </wsdl:operation>
      </wsdl:portType>
      <wsdl:binding name="TestSOAP" type="impl:Test">
        <soap:binding style="document"
          transport="http://schemas.xmlsoap.org/soap/http" />
        <wsdl:operation name="serviceMethod">
          <soap:operation soapAction="http://DefaultNamespace/serviceMethod" />
          <wsdl:input>
            <soap:body use="literal" />
          </wsdl:input>
          <wsdl:output>
            <soap:body use="literal" />
          </wsdl:output>
        </wsdl:operation>
      </wsdl:binding>
      <wsdl:service name="Test">
        <wsdl:port binding="impl:TestSOAP" name="MyWebService">
          <soap:address location="http://localhost:8080/Temp/services/MyService" />
        </wsdl:port>
      </wsdl:service>
    </wsdl:definitions>

【问题讨论】:

  • 对我来说工作和编译都很好。你的错误信息到底是什么?
  • 您是否尝试过使用 eclipse 或 wsdl2java 生成骨架?当我尝试使用 Eclipse 时,它​​不会在向导中显示服务名称、端口名称,并给出“在 WSDL 的代码生成期间发生异常:java.lang.NoClassDefFoundError: com/ibm/wsdl/extensions/schema/ SchemaImportImpl" 用于 Axis2。

标签: java eclipse web-services wsdl wsdl2java


【解决方案1】:

这是您的安装问题。

下载并验证axis2 和axis2 eclipse 插件,确保您已设置AXIS2_HOME 类路径。

有时它也停止了对我的工作,然后我必须去重新安装所有东西。不要费心向 Eclipse 或 Apache 报告错误,它们总是以“WORKSFORME”的形式关闭。

从 wsdl 生成代码的步骤:

  1. 创建动态 Web 项目。
  2. 创建您的 wsdl 文件。
  3. 右键单击您的 wsdl 文件,选择 Web 服务 -> 生成 Java Bean Skeleton
  4. 点击完成

Axis2 库、构面和生成的代码将自动添加到您的项目中,不会出现编译问题。

【讨论】:

  • 你能说出你使用的是哪个eclipse版本和哪个axis2版本吗?
  • 我正在使用 jdk 1.5、eclipse helios、axis2 1.5.4、axis2 codegen 插件 1.5.4。
  • 感谢 bdares:好吧,我能够生成骨架类,但是当我将这些类添加到项目中时,它会在新生成的类中显示编译错误。您是否尝试将它们放入项目中?我在生成的“MapItem”类中看到 5 个编译错误。
  • 我直接将它们从eclipse生成到项目中,这样可以方便地将Axis2库和构面添加到项目中。您是否使用 CLI 调用 wsdl2java? ....
  • 实际上我创建了一个动态项目,添加了这个 wsdl,使用代码生成器插件 Axis2Code generator 1.5.4 和,给出文件路径,选择代码生成选项:自定义,选择:生成服务器端代码,选择输出路径(完成),在目标位置生成类,将它们复制并粘贴到 src 中的 eclipse 项目中。但是 MapItem 类存在编译问题。如果我使用 CLI,那么我也面临同样的问题。
【解决方案2】:

我遇到了同样的问题。我相信 Maven 文件夹结构是导致它的原因。我创建了一个没有 maven 的新项目并且它工作。稍后添加 Maven。还要检查“Java Build Path”中的源文件夹。如果缺少,您将需要添加它。

【讨论】:

  • 这并不能真正回答问题。如果您有其他问题,可以点击 进行提问。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。
  • 我回答了这个问题。我遇到了问题,如果您仔细阅读,我描述了我是如何解决的。
  • 您有类似(或相同)的症状,但显然是不同的问题:请注意,在您回答前四个月,bdares 回答的解决方案已被原始提问者接受为解决方案。您的解决方案可能是有效的,但针对的是不同的问题。您发布的内容是有价值的贡献,但仅作为评论,恕我直言。为了使该站点对未来的访问者有意义,我们必须尝试区分具有相似症状的不同问题。如果所有具有相似症状的问题都归结为一个问题,那么最终该网站将变得一团糟。
【解决方案3】:

我也遇到了同样的问题,但现在已经解决了。问题是如果你有一个“抛出某种异常”的方法,那么它就会导致问题。因此,不要抛出错误,而是尝试使用 try-catch 块语句。

【讨论】:

    猜你喜欢
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 2013-03-07
    • 2017-02-05
    相关资源
    最近更新 更多