2016-06-14 2 views
0

내 spyne 클래스 정의에서 특정 클래스 태그 이름을 가져 오는 방법이 있습니까? 경우 감안할 때spyne 다형성 태그 이름을 올바르게 얻는 방법

내 클래스 계층 구조는 다음과 같습니다

# models.py 
class Vehicle(ComplexModel): 
    ... 

class Car(Vehicle): 
    ... 

class Bike(Vehicle): 
    ... 

가 그럼 난, 다형성이 작동 얻기 위해, 자신의 문제가 비슷한 것 같다 원인이 질문의 답의 지시를 따랐다. 변경된

how to implement abstract model in spyne

How do you @rpc _returns polymorphic types in spyne?

중요 코드 라인 :

# start.py 
application=Application(
    ... 
    in_protocol=Soap11(...), 
    out_protocol=Soap11(polymorphic=True) 
) 

지금까지 너무 좋아.

<!-- Response.xml --> 
... 
<Vehicle xsi:type="Car"> 
    ... 
</Vehicle> 
... 

그래서 제 질문은 다음과 같습니다 :

내가 태그 이름으로 일반 클래스 이름 Vehicle 제거하고의 이름을 얻을 얻을 수 있습니다 내가 이런 짓을하면, 나는 다음과 같은 응답이있어 특정 클래스 예 대신 태그 이름으로 Car?

Remove the namespace from Spyne response variables

:이 문제의`ctx.out_string "와 텍스트 교체와 함께 몇 가지 방법을 본 적이

<Car> 
    ... 
</Car> 

:

따라서 응답은 다음과 같이해야한다 나는 아마 나에게 잘 될 것이라고 생각하지만, API에서 "아직 발견하지 못했던"일반적인 방법이 있다면, 대신 그것을 사용하는 것으로 알고 싶다.

+0

이것은 SOAP 다형성이 구현 된 방법입니다. 이것이 버그라고 생각합니까? –

+0

@BurakArslan 좋아, 나는 그것에 익숙하지 않았다. 나는 그것에 대한 약간의 연구를 할 것이다. 아니오 그래서 이런 종류의 기능이 필요 없다고 말하면 lxml과 같은 xml 인터프리터는 xml로 작업 할 때 tagname으로 'xsi : type'을 결정해야합니다. 그리고'xsi : type'이 특정 유형이기 때문에 일반 슈퍼 클래스를 tagname에있는 그대로 무시합니다. – 0x00F

+0

이제 네가 어디에서 왔는지 알 겠어. 내 대답을 참조하십시오. –

답변

0

XML 다형성이 작동하는 방식입니다. libxml2의 스키마 유효성 검사기 (lxml을 통해 사용)는 올바르게 해석해야합니다. 두 가지 방법을 비교하는 기사를 참조 또한 http://w3.org/TR/xmlschema-1/#declare-contentModel

: 당신은 당신이 전적으로 태그 이름을 통해 구별 할 <choice> 태그를 살펴 있는지 경우

OTOH, http://ibm.com/developerworks/library/ws-tip-xsdchoice

이미 갖고있는 것 같다 Spyne에서 다형성을 사용하는 방법을 알아 냈습니다. 따라서 여기에 <choice> 태그를 사용하는 방법은 다음과 같습니다. https://github.com/arskom/spyne/blob/57ef5c0db51cb194353c67d317990fe89bc4177d/spyne/test/interface/test_xml_schema.py#L51

+0

감사합니다. 예상대로 꽤 잘하고 있지만 요청 실행시이 줄은 반복적으로'DEBUG : spyne.protocol._base : Polymap miss cls switch : =>'이됩니다.'spyne.protocol._base.ProtocolMixin'의 코드를 얻은 후 제 경우에는'Vehicle'은'Vehicle.polymap'의 상속 클래스'Car'에 대한 정보가 없습니다. 이 문제를 해결하는 방법 또는 나에게 아무런 관심이 없어야하며, 기능이 부족하거나, 폴리맵이 설정되어 있지 않은 경우? – 0x00F

+0

이것은 오류가 아니며 다형성 클래스 전환이 'poly_map'조회없이 수행되었다는 것을 알려주고 있습니다. –

+0

좋아,하지만이 polymap 내 케이스에 두 개의 하위 클래스, 그래서 적절한 조회 일어날 수 있어야한다고 가정합니다. 이 올바른지? 그렇다면이 모든 작업을 수행하기 위해 주석을 달지 못하고 있습니까? – 0x00F