首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >axis wsdl生成

axis wsdl生成
EN

Stack Overflow用户
提问于 2009-02-13 17:08:48
回答 1查看 3.7K关注 0票数 3

我正在使用Axis对一个样本WebService进行建模。我现在要做的是试图了解哪些是自动wsdl和代码生成的限制。

现在来看一些服务器端代码:

这是示例web服务的框架:

代码语言:javascript
复制
public class TestWebService {
  public AbstractAttribute[] testCall( AbstractAttribute someAttribute ) {
    ....

我的数据类:公共抽象类AbstractAttribute { String name;

代码语言:javascript
复制
  /*get/set for name*/
  public abstract T getValue();
  public abstract void setValue(T value);
}

public class IntAttribute extends AbstractAttribute<Integer> {
  Integer value;
  public Integer getValue(){ return value; }
  public void setValue(Integer value){ this.value = value; }
}

public class StringAttribute extends AbstractAttribute<String> {
  String value;
  /* ok, you got the point, get/set for value field */
}

用于Axis2的eclipse工具非常乐意从这些源生成wsdl,包括属性类的模式,即:

代码语言:javascript
复制
<xs:complexType name="AbstractAttribute">
    <xs:sequence>
        <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/>
        <xs:element minOccurs="0" name="value" nillable="true" type="xs:anyType"/>
    </xs:sequence>
</xs:complexType>
<xs:complexType name="IntAttribute">
    <xs:complexContent>
        <xs:extension base="xsd:AbstractAttribute">
            <xs:sequence>
                <xs:element minOccurs="0" name="value" nillable="true" type="xs:int"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>
<xs:complexType name="StringAttribute">
    <xs:complexContent>
        <xs:extension base="xsd:AbstractAttribute">
            <xs:sequence>
                <xs:element minOccurs="0" name="value" nillable="true" type="xs:string"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

现在,如果在这里看到一些奇怪的东西,AbstractAttribute没有** abstract="true“**属性,并定义了一个anyType值元素,该元素在IntAttribute和StirngAttribute中被重写。我甚至不知道这是不是一个合法的模式(顺便说一句,我不认为它是合法的)。

此外,如果我试图从这个wsdl生成一个客户机(总是使用eclipse工具),生成的源代码将不会被编译,因为AbstractAttribute定义了一个

代码语言:javascript
复制
Object localValue;

字段和Int/String属性定义

代码语言:javascript
复制
int localValue;

代码语言:javascript
复制
String localValue;

..I试图“容纳”源代码(显然没有太多希望),结果是服务器试图实例化一个AbstractAttribute实例(抛出一个InstantiationException)。

所以我的问题是:有没有一种方法可以对上面的数据模型进行建模,或者web服务和XML模式通常不是这种特定情况下最好的工具?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-02-16 20:21:39

为了解释您遇到的问题,考虑一下当您的服务被调用时Axis需要做什么是有帮助的。

Axis只是一个java web应用程序……当它收到一个服务请求时,它会查找你为它定义的映射。如果它找到一个映射,它会尝试创建一个您定义的必要类的实例来为请求提供服务。

如果您已经将类定义为抽象的或接口的,那么您将获得InstantiationExceptions,因为这些类型不能被创建。当Axis尝试创建wsdl时,它无法确定要放入什么类型,因此将使用“anyType”。

回答您的问题:您可以在代码中使用上面的模型,但不能将这些类与Axis一起使用。我们在我们的项目中通常做的是:

web

  • 定义了我们需要的类,就像我们在典型的面向对象的web服务使用的application

  • Define“仅传输”类中一样。这些类由简单类型组成,可以很容易地创建。它们仅用于交换web服务消息。我们将这些类与Axis一起使用。

  • 为这两种类型的类找到了一些方法来轻松地共享/交换信息。您可以拥有两者共享的接口(但Axis不知道),甚至可以使用BeanUtils.copyProperites来保持两个不同对象的同步。

希望这回答了你的问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/546779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档