문제

복잡한 다형성 값을 반환 해야하는 Jax-RPC (Java) 웹 서비스가 있습니다. 보다 구체적으로, 클래스 구조는 다음과 같습니다.

abstract class Child {
}

class Question extends Child {
    private String name;
    // other fields, getters, and setters
}

class Section extends Child {
    private String label;
    private Child[] children;
    // getters and setters
}

class Quiz {
    private Child[] elements;
    // getter and setter
}

내 웹 서비스에는 퀴즈를 반환하는 메소드가 있습니다. 물론 질문 및 기타 섹션을 포함 할 수있는 질문과 섹션 등이 포함될 수 있습니다. 그러나 WSDL을 생성 할 때는 어린이와 퀴즈 만 제출합니다. 웹 서비스를 호출 할 때 적절한 수의 어린이와 퀴즈 요소를 되 찾을 때 모두 어린이 요소이며 모두 비어 있습니다. .

XML을 문자열로 반환하기 만하면서이 작업을 만드는 좋은 방법이 있습니까?

누군가가 묻기 전에, 통제 할 수없는 상황으로 인해 Jax-Ws를 사용할 수 없습니다.

도움이 되었습니까?

해결책

JAX-RPC가 그런 식으로 다형성을 지원한다고 생각하지 않습니다. 나는 비슷한 문제를 겪었고, 두 명의 회원 만있는 수업을 만들어서 그 일을해야했다. 따라서 귀하의 경우 :

class Child 
{
    private Section section;
    private Question question;

   // Constructor, etc...
}

class Question 
{
    private String name;
    // other fields, getters, and setters
}

class Section 
{
    private String label;
    private Child[] children;
    // getters and setters
}

class Quiz 
{
    private Child[] elements;
    // getter and setter
}

고객은 어떤 자녀의 구성원이 채워 졌는지 확인해야하며, 끔찍하게 못 생겼습니다.

다른 팁

어쩌면 누군가가 여전히 그것을 찾고있을 것입니다. 축 1.4에서 수행 할 수 있습니다.

  1. Axis 웹 서비스 배포 파일 (WSDD) 섹션에 다음 줄을 추가하십시오.

    <parameter name="emitAllTypesInWSDL" value="true" />
    
  2. 'Extraclasses'를 포함하도록 ANT 빌드 파일에서 작업을 수정하십시오.

    <axis-java2wsdl ... extraClasses="..."></axis-java2wsdl>
    

    외계는 전달 될 모든 클래스를 언급합니다. Axis는 매개 변수로 통과/반환 할 어린이를 추측 할 수 없기 때문입니다.

완료, 이제 메소드에서 파생 된 클래스를 전달하여 상위 클래스를 수락 할 수 있습니다. 등:

// server side class A { ...}
class B extends A {...}
class C extends A {...}

// ws
class wsAxis { public void processPolymorphCall(A obj); }

// client side
wsAxis.processPolymorphCall(new C());

// this will work now, as much as returning derivated classes in place of base class.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top