문제

축을 사용하여 샘플 웹 서비스를 모델링하고 있습니다. 내가 지금하고있는 일은 자동화 된 WSDL 및 코드 생성의 한계가 무엇인지 이해하려고 노력하는 것입니다.

이제 일부 서버 사이드 코드의 경우 :

이것은 샘플 웹 서비스의 골격입니다.

public class TestWebService {
  public AbstractAttribute[] testCall( AbstractAttribute someAttribute ) {
    ....

그리고 내 데이터 클래스 : 공개 추상 클래스 AbstractAttribute {문자열 이름;

  /*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을 생성하는 것을 매우 기쁘게 생각합니다.

<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에는 ** achold = "true"** 속성이 없으며 intattribute 및 stirngattribute에서 다시 작성되는 모든 유형 값 요소를 정의합니다. 나는 이것이 법적 스키마인지조차 모른다 (나는 그것이 합법적이라고 생각하지 않는다).

더욱

Object localValue;

필드 및 int/문자열 속성이 정의됩니다

int localValue;

그리고

String localValue;

.. 나는 소스를 "수용"하려고 시도했으며 (많은 희망없이), 결과는 서버가 추상적 인 입학 인스턴스를 인스턴스화하려고 시도한 결과 (인스턴스티션 소지를 던지기).

내 질문은 위의 데이터 모델과 같은 것을 모델링하는 방법이 있거나 웹 서비스 및 XML Schemas ''일반적 으로이 특정 사례에 사용하기에 가장 적합한 도구가 아니십니까?

도움이 되었습니까?

해결책

직면 한 문제를 설명하기 위해 서비스 호출 할 때 축이해야 할 일을 생각하는 데 도움이됩니다.

Axis는 단순히 Java 웹 응용 프로그램입니다. 서비스 요청을 받으면 정의한 매핑을 찾습니다. 매핑을 찾으면 요청을 서비스하기 위해 정의한 필요한 클래스의 인스턴스를 작성하려고합니다.

클래스를 추상적 또는 인터페이스로 정의한 경우 이러한 유형을 생성 할 수 없으므로 인스턴스티션 외환이 나타납니다. Axis가 WSDL을 만들려고했을 때 어떤 유형을 넣을 것인지 파악할 수 없으므로 "AnyType"을 사용할 수 없습니다.

질문에 답하기 위해 : 코드에 위에있는 모델을 사용할 수 있지만 축 으로이 클래스를 사용할 수는 없습니다. 프로젝트에서 일반적으로 수행 한 것은 다음과 같습니다.

  1. 일반적인 객체 지향 응용 프로그램에서와 같이 필요한 클래스 정의
  2. 웹 서비스에 사용되는 "전달 전용"클래스를 정의하십시오. 이 클래스는 간단한 유형으로 구성되며 쉽게 만들 수 있습니다. 웹 서비스 메시지를 교환하는 데만 사용됩니다. 우리는이 클래스를 축으로 사용합니다.
  3. 이 두 가지 유형의 클래스가 정보를 쉽게 공유/교환 할 수있는 방법을 찾으십시오. 둘 다 공유하는 인터페이스를 가질 수 있지만 (축이 알 수 없음) Beanutils.copyproperites를 사용하여 두 개의 다른 객체를 동기화합니다.

당신의 질문에 대한 답변을 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top