JAX-RPC 웹 서비스의 다형성
-
05-07-2019 - |
문제
복잡한 다형성 값을 반환 해야하는 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에서 수행 할 수 있습니다.
Axis 웹 서비스 배포 파일 (WSDD) 섹션에 다음 줄을 추가하십시오.
<parameter name="emitAllTypesInWSDL" value="true" />
'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.