![](/img/trans.png)
[英]How to turn off Windows Form inheritance in Visual Studio 2017?
[英]Turn off CXF Aegis Inheritance support / Use Inheritance with DataContractSerializer?
我將Apache CXF與Aegis數據綁定一起使用,以向C#客戶端提供Java Web服務。 原則上,這很好。 在C#端,我想使用更有限的DataContractSerializer,因為它允許集合而不是數組。 我了解使用DataContractSerializer限制了Aegis生成的WSDL的復雜性。 現在,我有了使用繼承的Java類型。 Aegis能夠生成包含基本類型和派生類型的WSDL,但是DataContractSerializer似乎無法理解此WSDL。 SvcUtil退回到XmlSerializer,我的集合得到了丑陋的數組。
我可以想象您在理論上可以解決這個問題:
我認為后兩種選擇是不可能的,因此我堅持使用第一種選擇。 如何關閉“宙斯盾”繼承?
WSDL片段示例:
<xsd:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://tables.basic.meona.de">
<xsd:complexType abstract="true" name="BaseTreeNode">
<xsd:sequence>
<xsd:element minOccurs="0" name="active" type="xsd:boolean"/>
<xsd:element minOccurs="0" name="category" type="xsd:boolean"/>
<xsd:element minOccurs="0" name="name" nillable="true" type="xsd:string"/>
<xsd:element minOccurs="0" name="sequenceNumber" nillable="true" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
<xsd:complexType name="EmergencyDiagnosis">
<xsd:complexContent>
<xsd:extension base="ns0:BaseTreeNode">
<xsd:sequence>
<xsd:element minOccurs="0" name="externalCode" nillable="true" type="xsd:string"/>
<xsd:element minOccurs="0" name="favoriteDiagnosis" type="xsd:boolean"/>
<xsd:element minOccurs="0" name="identifier" nillable="true" type="xsd:string"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
似乎以前版本的Aegis沒有生成該擴展,所以我希望可以將其關閉: https : //issues.apache.org/jira/browse/CXF-5176
閱讀Aegis源代碼后,我幫助自己解決了以下問題:
public class AegisNonExtensionBeanType extends BeanType {
@Override
public BeanTypeInfo getTypeInfo() {
BeanTypeInfo bti = super.getTypeInfo();
bti.setExtension(false);
bti.setExtensibleAttributes(false);
bti.setExtensibleElements(false);
return bti;
}
@Override
public AegisType getSuperType() {
return null;
}
}
如果我為繼承的bean注冊此AegisType,它將起作用。 難道沒有更好的辦法嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.