2012-03-22 3 views
2

NetBeans와 Glassfish를 사용하여 기존 WSDL로 작성된 WebService에서 작업하고 있습니다. NetBeans가 지정된 WSDL에서 필요한 클래스를 만들었습니다. WSDL은 몇 가지 기본 데이터 형식 (예 : BaseType)과이를 확장하는 다른 데이터 형식을 정의합니다. (예 : ExtType1, ExtType2 ...) WSDL에 설명 된 일부 SOAP 함수는 BaseType 유형의 매개 변수를 허용하므로 확장 유형을 매개 변수로 사용할 수도 있습니다. 넷빈즈 생성 된 클래스에일반 JAXBElement에서 Java 클래스를 검색하는 방법 <? extends >

$response = $ws->__soapCall(
    'myFunctionName', 
    array('theParameter' => array (
       'BaseTypeField1' => 'some value', 
       'BaseTypeField2' => 'some other value' 
     ) 
    ) 
); 

또는 지금 확장 된 형식 매개 변수

$response = $ws->__soapCall(
    'myFunctionName', 
    array('theParameter' => array (
       'BaseTypeField1' => 'some value', 
       'BaseTypeField2' => 'some other value', 
       'ExtTypeField1' => 'some value', 
       'ExtTypeField2' => 'some other value' 
     ) 
    ) 
); 

를 사용하여 : PHP로 작성된 웹 서비스 클라이언트에서

, 나는 기본 유형 매개 변수를 사용하는 방법을 호출 할 수 있습니다 JAXBElement 유형이 < 인 객체가 있습니까? BaseType 오브젝트가 예상되는 BaseType >을 확장합니다.

질문 : 웹 서비스 클라이언트의 매개 변수 객체가 BaseType 중 하나 또는 확장 된 유형 중 하나 (또는 ​​그 중 어떤 유형) 인 경우 Java 웹 메서드 호출 내에서 어떻게 확인할 수 있습니까? 해당 개체에 대한 클래스 데이터 정보를 검색하려고 시도했지만 항상 BaseType이므로 ExtTypeField1 및 ExtTypeField2를 사용할 수 있는지 여부를 알 수 없습니다.

당신이 개체 유형에 따라 뭔가를 할 수 거기에서 이제
Class<? extends BaseType> klass = object.getValue().getClass(); 

그러나 이것은이다 :

감사

답변

1

를 사용하면 다음과 같이 값의 유형을 결정할 수있는이 JAXBElement<? extends BaseType> object 같은 뭔가를 감안할 때 항상 최선의 방법은 아닙니다. 클래스 <같은

BaseType value = object.getValue(); 
if (value instanceof ExtType1) { 
    ExtType1 field1 = (ExtType1) value; 
    // we now know that it's an ExtType1 
} else if (value instanceof ExtTypeField2) { 
    ExtType2 field2 = (ExtType2) value; 
    // we now know that it's an ExtType2 
} // etc... 
+0

음, 난 그냥 시도 뭔가 : 당신이 아마 원할 것은이 같은 더 뭔가? extends BaseType> klass = object.getValue(). getClass(); klass가 BaseType인지 아니면 ExtType1인지 어떻게 알 수 있습니까? 항상 BaseType이 ... – Angelo

+0

두 번째 제안을 읽었습니까? 어느 쪽이든, 여러분의 klass가'BaseType'이라고 말하면,'ExtType1'이'BaseType'의 수퍼 타입이 아닌 한,'ExtType1'도'ExtTypeX'도 아닌'BaseType'입니다. –

+0

좋아요, 그것은 BaseType입니다. 그래서 PHP 웹 서비스 클라이언트 측에서,'BaseType' 필드 또는'ExtType' 필드만으로 웹 서비스 함수를 호출한다고해서 Java 측에서 아무런 차이가 없으며 항상 BaseType을 얻습니다 '... 두 번째 접근법을 잘 이해하지 못합니다. 'ExtTypeField1'과'ExtTypeField2'는'ExtType'의 멤버입니다. 그래서'value instanceof ExtTypeField1'은 어떻게 작동할까요? – Angelo

관련 문제