You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yoko-commits@incubator.apache.org by br...@apache.org on 2007/01/09 18:29:44 UTC
svn commit: r494510 [2/3] - in /incubator/yoko/trunk:
bindings/src/main/java/org/apache/yoko/bindings/corba/
bindings/src/main/java/org/apache/yoko/bindings/corba/interceptors/
bindings/src/main/java/org/apache/yoko/bindings/corba/types/
bindings/src/t...
Modified: incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLToCorbaBinding.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLToCorbaBinding.java?view=diff&rev=494510&r1=494509&r2=494510
==============================================================================
--- incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLToCorbaBinding.java (original)
+++ incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLToCorbaBinding.java Tue Jan 9 10:29:42 2007
@@ -21,13 +21,10 @@
import java.io.File;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -51,65 +48,35 @@
import org.apache.cxf.wsdl.JAXBExtensionHelper;
import org.apache.schemas.yoko.bindings.corba.ArgType;
import org.apache.schemas.yoko.bindings.corba.BindingType;
-import org.apache.schemas.yoko.bindings.corba.CaseType;
-import org.apache.schemas.yoko.bindings.corba.Enum;
-import org.apache.schemas.yoko.bindings.corba.Enumerator;
import org.apache.schemas.yoko.bindings.corba.MemberType;
import org.apache.schemas.yoko.bindings.corba.OperationType;
import org.apache.schemas.yoko.bindings.corba.ParamType;
import org.apache.schemas.yoko.bindings.corba.RaisesType;
-import org.apache.schemas.yoko.bindings.corba.Struct;
import org.apache.schemas.yoko.bindings.corba.TypeMappingType;
-import org.apache.schemas.yoko.bindings.corba.Union;
-import org.apache.schemas.yoko.bindings.corba.Unionbranch;
+
import org.apache.ws.commons.schema.XmlSchema;
-import org.apache.ws.commons.schema.XmlSchemaAll;
import org.apache.ws.commons.schema.XmlSchemaAnnotation;
-import org.apache.ws.commons.schema.XmlSchemaAttribute;
-import org.apache.ws.commons.schema.XmlSchemaChoice;
-import org.apache.ws.commons.schema.XmlSchemaComplexContent;
-import org.apache.ws.commons.schema.XmlSchemaComplexContentExtension;
import org.apache.ws.commons.schema.XmlSchemaComplexType;
import org.apache.ws.commons.schema.XmlSchemaElement;
-import org.apache.ws.commons.schema.XmlSchemaEnumerationFacet;
-import org.apache.ws.commons.schema.XmlSchemaFacet;
-import org.apache.ws.commons.schema.XmlSchemaLengthFacet;
-import org.apache.ws.commons.schema.XmlSchemaMaxLengthFacet;
+import org.apache.ws.commons.schema.XmlSchemaExternal;
import org.apache.ws.commons.schema.XmlSchemaObjectTable;
-import org.apache.ws.commons.schema.XmlSchemaParticle;
-import org.apache.ws.commons.schema.XmlSchemaSequence;
-import org.apache.ws.commons.schema.XmlSchemaSimpleContent;
-import org.apache.ws.commons.schema.XmlSchemaSimpleContentExtension;
-import org.apache.ws.commons.schema.XmlSchemaSimpleContentRestriction;
-import org.apache.ws.commons.schema.XmlSchemaSimpleType;
-import org.apache.ws.commons.schema.XmlSchemaSimpleTypeList;
-import org.apache.ws.commons.schema.XmlSchemaSimpleTypeRestriction;
import org.apache.ws.commons.schema.XmlSchemaType;
-import org.apache.yoko.tools.common.CorbaPrimitiveMap;
-import org.apache.yoko.tools.common.ReferenceConstants;
-import org.apache.yoko.tools.common.W3CConstants;
import org.apache.yoko.wsdl.CorbaConstants;
import org.apache.yoko.wsdl.CorbaTypeImpl;
public class WSDLToCorbaBinding {
protected static final Logger LOG = LogUtils.getL7dLogger(WSDLToCorbaBinding.class);
-
- protected static final String DISCRIMINATORTYPES[]
- = new String[] {"long", "short", "boolean", "char"};
- protected static final Set<String> SUPPORTEDDISTYPES =
- new TreeSet<String>(Arrays.asList(DISCRIMINATORTYPES));
- static final CorbaPrimitiveMap CORBAPRIMITIVEMAP = new CorbaPrimitiveMap();
-
+
static XmlSchema xmlSchemaType;
static String wsdlFileName;
- static String idlversion = ":1.0";
static String outputFile;
static String namespace;
- static String repoString = "IDL:";
static boolean verboseOn;
protected Definition def;
protected String idlNamespace;
+
+ WSDLToCorbaHelper helper = new WSDLToCorbaHelper();
TypeMappingType typeMappingType;
ExtensionRegistry extReg;
@@ -118,23 +85,26 @@
Map<Object, Object> bindingNameMap = new HashMap<Object, Object>();
String bindingName;
WSDLParameter wsdlParameter;
- WSDLTypes wsdltypes;
List<Object> bindingNames;
List<XmlSchema> xmlSchemaList;
WSDLToTypeProcessor typeProcessor = new WSDLToTypeProcessor();
-
-
-
+
public WSDLToCorbaBinding() {
}
public void setXMLSchemaList(List<XmlSchema> list) {
xmlSchemaList = list;
+ helper.setXMLSchemaList(list);
}
public void setXMLSchema(XmlSchema schema) {
xmlSchemaType = schema;
+ helper.setXMLSchema(schema);
+ }
+
+ public WSDLToCorbaHelper getHelper() {
+ return helper;
}
public Definition generateCORBABinding() throws Exception {
@@ -153,6 +123,7 @@
public Binding[] generateCORBABinding(Definition definition) throws Exception {
def = definition;
+ helper.setWsdlDefinition(def);
if (extReg == null) {
extReg = def.getExtensionRegistry();
addExtensions(extReg);
@@ -160,16 +131,15 @@
}
typeProcessor.setWSDLDefinition(def);
wsdlParameter = new WSDLParameter();
- wsdltypes = new WSDLTypes();
if (idlNamespace == null) {
setIdlNamespace(def);
}
generateNSPrefix(def, getIdlNamespace(), "ns");
typeProcessor.process();
-
- xmlSchemaType = typeProcessor.getXmlSchemaType();
- xmlSchemaList = typeProcessor.getXmlSchemaTypes();
+
+ setXMLSchema(typeProcessor.getXmlSchemaType());
+ setXMLSchemaList(typeProcessor.getXmlSchemaTypes());
List<PortType> intfs = null;
if (interfaceNames.size() > 0) {
@@ -265,14 +235,14 @@
setBindingName(bname);
bqname = new QName(definition.getTargetNamespace(), bname, prefix);
int count = 0;
- while (queryBinding(definition, bqname)) {
+ while (helper.queryBinding(definition, bqname)) {
bname = bname + count;
bqname = new QName(definition.getTargetNamespace(), bname, prefix);
}
} else {
bqname = new QName(definition.getTargetNamespace(), bname, prefix);
// Check if the Binding with name already exists
- if (queryBinding(definition, bqname)) {
+ if (helper.queryBinding(definition, bqname)) {
String msgStr = "Binding " + bqname.getLocalPart()
+ " already exists in WSDL.";
org.apache.cxf.common.i18n.Message msg =
@@ -302,9 +272,9 @@
try {
bindingType = (BindingType)extReg
.createExtension(Binding.class, CorbaConstants.NE_CORBA_BINDING);
- bindingType.setRepositoryID(repoString
+ bindingType.setRepositoryID(helper.REPO_STRING
+ binding.getPortType().getQName().getLocalPart().replace('.', '/')
- + idlversion);
+ + helper.IDL_VERSION);
binding.addExtensibilityElement(bindingType);
} catch (WSDLException ex) {
@@ -411,7 +381,7 @@
CorbaTypeImpl extype = convertFaultToCorbaType(xmlSchemaType, fault);
if (extype != null) {
- raisestype.setException(createQNameCorbaNamespace(extype.getName()));
+ raisestype.setException(helper.createQNameCorbaNamespace(extype.getName()));
operationType.getRaises().add(raisestype);
}
}
@@ -435,46 +405,53 @@
typeMappingType = (TypeMappingType)extReg.createExtension(Definition.class,
CorbaConstants.NE_CORBA_TYPEMAPPING);
typeMappingType.setTargetNamespace(getIdlNamespace());
- addCorbaTypes(definition);
definition.addExtensibilityElement(typeMappingType);
-
- } else {
- addCorbaTypes(definition);
}
+ helper.setTypeMap(typeMappingType);
+ addCorbaTypes(definition);
}
private void addCorbaTypes(Definition definition) throws Exception {
-
- try {
- CorbaTypeImpl corbaTypeImpl = null;
- Iterator s = xmlSchemaList.iterator();
+ Iterator s = xmlSchemaList.iterator();
- while (s.hasNext()) {
- XmlSchema xmlSchemaTypes = (XmlSchema)s.next();
- XmlSchemaObjectTable objs = xmlSchemaTypes.getSchemaTypes();
- Iterator i = objs.getValues();
- while (i.hasNext()) {
- XmlSchemaType type = (XmlSchemaType)i.next();
- boolean anonymous = wsdltypes.isAnonymous(type.getName());
- corbaTypeImpl = convertSchemaToCorbaType(type, type.getQName(), null,
- null, anonymous);
- if (corbaTypeImpl != null) {
- if (corbaTypeImpl.getQName() != null) {
- corbaTypeImpl.setQName(null);
- }
- if (!isDuplicate(corbaTypeImpl)) {
- typeMappingType.getStructOrExceptionOrUnion().add(corbaTypeImpl);
- }
- }
+ while (s.hasNext()) {
+ XmlSchema xmlSchemaTypes = (XmlSchema)s.next();
+
+ Iterator schemas = xmlSchemaTypes.getIncludes().getIterator();
+ while (schemas.hasNext()) {
+ Object obj = schemas.next();
+ if (obj instanceof XmlSchemaExternal) {
+ XmlSchemaExternal extSchema = (XmlSchemaExternal) obj;
+ addCorbaTypes(extSchema.getSchema());
}
- addCorbaElements(corbaTypeImpl, xmlSchemaTypes);
}
- //definition.addExtensibilityElement(typeMappingType);
- } catch (WSDLException ex) {
- ex.printStackTrace();
+
+ addCorbaTypes(xmlSchemaTypes);
+
}
}
+ private void addCorbaTypes(XmlSchema xmlSchemaTypes) throws Exception {
+ XmlSchemaObjectTable objs = xmlSchemaTypes.getSchemaTypes();
+ Iterator i = objs.getValues();
+ CorbaTypeImpl corbaTypeImpl = null;
+ while (i.hasNext()) {
+ XmlSchemaType type = (XmlSchemaType)i.next();
+ boolean anonymous = WSDLTypes.isAnonymous(type.getName());
+ corbaTypeImpl = helper.convertSchemaToCorbaType(type, type.getQName(), null,
+ null, anonymous);
+ if (corbaTypeImpl != null) {
+ if (corbaTypeImpl.getQName() != null) {
+ corbaTypeImpl.setQName(null);
+ }
+ if (!helper.isDuplicate(corbaTypeImpl)) {
+ typeMappingType.getStructOrExceptionOrUnion().add(corbaTypeImpl);
+ }
+ }
+ }
+ addCorbaElements(corbaTypeImpl, xmlSchemaTypes);
+ }
+
private void addCorbaElements(CorbaTypeImpl corbaTypeImpl,
XmlSchema xmlSchemaTypes) throws Exception {
@@ -486,7 +463,7 @@
if (el.getSchemaType() == null) {
anonymous = true;
} else {
- anonymous = wsdltypes.isAnonymous(el.getSchemaType().getName());
+ anonymous = WSDLTypes.isAnonymous(el.getSchemaType().getName());
}
if (el.getSchemaType() != null) {
@@ -495,64 +472,27 @@
annotation = el.getAnnotation();
}
corbaTypeImpl =
- convertSchemaToCorbaType(el.getSchemaType(),
- el.getQName(), el.getSchemaType(),
- annotation, anonymous);
+ helper.convertSchemaToCorbaType(el.getSchemaType(),
+ el.getQName(), el.getSchemaType(),
+ annotation, anonymous);
if (el.isNillable()) {
QName uname =
- createQNameCorbaNamespace(corbaTypeImpl.getQName().getLocalPart() + "_nil");
- corbaTypeImpl = createNillableUnion(uname,
- checkPrefix(el.getQName()), checkPrefix(corbaTypeImpl.getQName()));
+ helper.createQNameCorbaNamespace(corbaTypeImpl.getQName().getLocalPart() + "_nil");
+ corbaTypeImpl = helper.createNillableUnion(uname,
+ helper.checkPrefix(el.getQName()),
+ helper.checkPrefix(corbaTypeImpl.getQName()));
}
if (corbaTypeImpl != null) {
if (corbaTypeImpl.getQName() != null) {
corbaTypeImpl.setQName(null);
}
- if (!isDuplicate(corbaTypeImpl)) {
+ if (!helper.isDuplicate(corbaTypeImpl)) {
typeMappingType.getStructOrExceptionOrUnion().add(corbaTypeImpl);
}
}
}
}
- }
-
- protected boolean queryBinding(Definition definition, QName bqname) {
- Map bindings = definition.getBindings();
- Iterator i = bindings.values().iterator();
- while (i.hasNext()) {
- Binding binding = (Binding)i.next();
- if (binding.getQName().getLocalPart().equals(bqname.getLocalPart())) {
- return true;
- }
- }
- return false;
- }
-
- public CorbaTypeImpl convertSchemaToCorbaType(XmlSchemaType stype,
- QName defaultName, XmlSchemaType parent, XmlSchemaAnnotation annotation,
- boolean anonymous) throws Exception {
- CorbaTypeImpl corbaTypeImpl = null;
- // need to determine if its a primitive type.
- if (stype.getBaseSchemaType() != null) {
- corbaTypeImpl = processPrimitiveType(stype.getQName());
- }
-
- if (stype instanceof XmlSchemaComplexType) {
- return corbaTypeImpl = processComplexType((XmlSchemaComplexType)stype,
- defaultName, annotation, anonymous);
- } else if (stype instanceof XmlSchemaSimpleType) {
- return corbaTypeImpl = processSimpleType((XmlSchemaSimpleType)stype,
- defaultName, anonymous);
- } else if (xmlSchemaType.getElementByName(stype.getQName()) != null) {
- XmlSchemaElement el = xmlSchemaType.getElementByName(stype.getQName());
- return corbaTypeImpl = processElementType(el, defaultName);
- } else {
- System.out.println("type not Type found");
- }
-
-
- return corbaTypeImpl;
- }
+ }
private CorbaTypeImpl convertFaultToCorbaType(XmlSchema xmlSchema, Fault fault) throws Exception {
org.apache.schemas.yoko.bindings.corba.Exception corbaex = null;
@@ -566,19 +506,19 @@
faultName = faultName + "Exception";
}
- QName name = createQNameCorbaNamespace(faultName);
+ QName name = helper.createQNameCorbaNamespace(faultName);
Iterator parts = fault.getMessage().getParts().values().iterator();
if (parts.hasNext()) {
Part part = (Part)parts.next();
- schemaType = lookUpType(part);
+ schemaType = helper.lookUpType(part);
- if (schemaType != null && !isSchemaTypeException(schemaType)) {
+ if (schemaType != null && !helper.isSchemaTypeException(schemaType)) {
corbaex = new org.apache.schemas.yoko.bindings.corba.Exception();
corbaex.setName(schemaType.getName());
corbaex.setQName(schemaType.getQName());
CorbaTypeImpl corbaTypeImpl =
- convertSchemaToCorbaType(schemaType, part.getTypeName(), null, null, false);
+ helper.convertSchemaToCorbaType(schemaType, part.getTypeName(), null, null, false);
if (corbaTypeImpl != null) {
MemberType member = new MemberType();
member.setName(corbaTypeImpl.getQName().getLocalPart());
@@ -587,7 +527,7 @@
}
} else {
QName elementName = part.getElementName();
- QName schematypeName = checkPrefix(schemaType.getQName());
+ QName schematypeName = helper.checkPrefix(schemaType.getQName());
corbaex = createCorbaException(name, schematypeName, schemaType, elementName);
}
} else {
@@ -607,12 +547,12 @@
} else {
// Set the repository ID for Exception
// add to CorbaTypeMapping
- String repoId = repoString + corbaex.getName().replace('.', '/') + idlversion;
+ String repoId = helper.REPO_STRING + corbaex.getName().replace('.', '/') + helper.IDL_VERSION;
corbaex.setRepositoryID(repoId);
CorbaTypeImpl corbaTypeImpl = (CorbaTypeImpl)corbaex;
corbaTypeImpl.setQName(null);
- if (!isDuplicate(corbaTypeImpl)) {
- CorbaTypeImpl dup = isDuplicateException(corbaTypeImpl);
+ if (!helper.isDuplicate(corbaTypeImpl)) {
+ CorbaTypeImpl dup = helper.isDuplicateException(corbaTypeImpl);
if (dup != null) {
typeMappingType.getStructOrExceptionOrUnion().remove(dup);
typeMappingType.getStructOrExceptionOrUnion().add(corbaTypeImpl);
@@ -638,16 +578,18 @@
corbaex = new org.apache.schemas.yoko.bindings.corba.Exception();
corbaex.setName(name.getLocalPart());
corbaex.setQName(schemaTypeName);
- corbaex.setType(checkPrefix(stype.getQName()));
- corbaex.setRepositoryID(repoString + "/" + name.getLocalPart() + idlversion);
+ corbaex.setType(helper.checkPrefix(stype.getQName()));
+ corbaex.setRepositoryID(helper.REPO_STRING + "/" + name.getLocalPart() + helper.IDL_VERSION);
- List attributeMembers = processAttributesAsMembers(complex.getAttributes().getIterator());
+ List attributeMembers = helper.processAttributesAsMembers(complex.getAttributes().getIterator());
Iterator iterator = attributeMembers.iterator();
while (iterator.hasNext()) {
MemberType memberType = (MemberType)iterator.next();
corbaex.getMember().add(memberType);
}
- List members = processContainerAsMembers(complex.getParticle(), stype.getQName(), schemaTypeName);
+ List members = helper.processContainerAsMembers(complex.getParticle(),
+ stype.getQName(),
+ schemaTypeName);
Iterator it = members.iterator();
while (it.hasNext()) {
MemberType memberType = (MemberType)it.next();
@@ -657,1164 +599,8 @@
return corbaex;
}
- protected List processContainerAsMembers(XmlSchemaParticle particle, QName defaultName,
- QName schemaTypeName) throws Exception {
- List<MemberType> members = new ArrayList<MemberType>();
-
- Iterator iterL = null;
- if (particle instanceof XmlSchemaSequence) {
- XmlSchemaSequence scontainer = (XmlSchemaSequence)particle;
- iterL = scontainer.getItems().getIterator();
- } else if (particle instanceof XmlSchemaChoice) {
- XmlSchemaChoice scontainer = (XmlSchemaChoice)particle;
- iterL = scontainer.getItems().getIterator();
- } else if (particle instanceof XmlSchemaAll) {
- XmlSchemaAll acontainer = (XmlSchemaAll)particle;
- iterL = acontainer.getItems().getIterator();
- }
-
- while (iterL.hasNext()) {
- XmlSchemaParticle container = (XmlSchemaParticle)iterL.next();
-
- if (container instanceof XmlSchemaSequence) {
- XmlSchemaSequence sequence = (XmlSchemaSequence)container;
- CorbaTypeImpl memberType = processSequenceType(sequence, defaultName, schemaTypeName);
- QName typeName = memberType.getQName();
- if (memberType instanceof Struct) {
- memberType.setQName(null);
- if (memberType != null && !isDuplicate(memberType)) {
- typeMappingType.getStructOrExceptionOrUnion().add(memberType);
- }
- }
-
- MemberType member = new MemberType();
- member.setName(memberType.getName() + "_f");
- member.setIdltype(typeName);
- members.add(member);
-
- } else if (container instanceof XmlSchemaChoice) {
- XmlSchemaChoice choice = (XmlSchemaChoice)container;
- CorbaTypeImpl corbatype = processChoice(choice, defaultName, schemaTypeName);
- MemberType member = new MemberType();
- member.setName(corbatype.getQName().getLocalPart());
- member.setIdltype(corbatype.getQName());
- members.add(member);
- } else if (container instanceof XmlSchemaAll) {
- XmlSchemaAll all = (XmlSchemaAll)container;
- CorbaTypeImpl corbatype = processAllType(all, defaultName, schemaTypeName);
- MemberType member = new MemberType();
- member.setName(corbatype.getQName().getLocalPart());
- member.setIdltype(corbatype.getQName());
- members.add(member);
- } else if (container instanceof XmlSchemaElement) {
- XmlSchemaElement element = (XmlSchemaElement)container;
- CorbaTypeImpl corbatype = processLocalElement(element);
-
- if (corbatype != null) {
- MemberType member;
- String memberName = element.getQName().getLocalPart();
-
- member = new MemberType();
- member.setName(memberName);
- member.setIdltype(corbatype.getQName());
- members.add(member);
- } else {
- String msg = "Unsupported Element Found in CORBA Binding Generation:"
- + element.getQName();
- LOG.log(Level.WARNING, msg.toString());
- }
- }
- }
- return members;
- }
-
- private CorbaTypeImpl processChoice(XmlSchemaChoice choice, QName defaultName,
- QName schemaTypeName) throws Exception {
- QName choicename = null;
-
- if (schemaTypeName == null) {
- choicename = createQNameTargetNamespace(defaultName.getLocalPart());
- } else {
- choicename = createQNameTargetNamespace(schemaTypeName.getLocalPart());
- }
- choicename = checkPrefix(choicename);
-
- CorbaTypeImpl corbatype = createUnion(choicename, choice, defaultName, schemaTypeName);
- String repoId = repoString + corbatype.getQName().getLocalPart().replace('.', '/')
- + idlversion;
- ((Union)corbatype).setRepositoryID(repoId);
-
- if (!(choice.getMaxOccurs() == 1) || !(choice.getMinOccurs() == 1)) {
- QName name = createQNameTargetNamespace(corbatype.getQName().getLocalPart() + "Array");
- CorbaTypeImpl arrayType =
- createArray(name, corbatype.getQName(), corbatype.getQName(),
- choice.getMaxOccurs(), choice.getMinOccurs(), false);
-
- if (arrayType != null) {
- arrayType.setQName(null);
- if (!isDuplicate(arrayType)) {
- typeMappingType.getStructOrExceptionOrUnion().add(arrayType);
- }
- }
- }
- return corbatype;
- }
-
- private CorbaTypeImpl processLocalElement(XmlSchemaElement element) throws Exception {
- CorbaTypeImpl membertype = new CorbaTypeImpl();
- CorbaTypeImpl memtype = new CorbaTypeImpl();
-
- QName memName = null;
- if (element.isNillable()) {
-
- CorbaTypeImpl elemtype = convertSchemaToCorbaType(element.getSchemaType(), element.getQName(),
- element.getSchemaType(), null, true);
- QName name = createQNameTargetNamespace(elemtype.getQName().getLocalPart() + "_nil");
- QName elName = checkPrefix(element.getQName());
- if (elName == null) {
- elName = createQNameTargetNamespace(element.getQName().getLocalPart());
- }
- memtype = createNillableUnion(name, elName,
- elemtype.getQName());
- memName = createQNameCorbaNamespace(memtype.getQName().getLocalPart());
-
- if (memtype != null) {
- memtype.setQName(null);
- if (!isDuplicate(memtype)) {
- typeMappingType.getStructOrExceptionOrUnion().add(memtype);
- }
- }
- membertype.setQName(memName);
- membertype.setName(memtype.getName());
- membertype.setType(memtype.getType());
-
- } else {
- // Need TO DO
- // Need to check if its referencing a type first refname=""
- //if (element.getRefName()
- if (element.getSchemaType() != null) {
- XmlSchemaType st = element.getSchemaType();
- boolean anonymous = wsdltypes.isAnonymous(st.getName());
- membertype = convertSchemaToCorbaType(st, element.getQName(), st, null, anonymous);
- } else {
- if (element.getSchemaTypeName() != null) {
- QName name = checkPrefix(element.getSchemaTypeName());
- membertype = getLocalType(name);
- }
- }
- }
-
- if (!(element.getMaxOccurs() == 1) || !(element.getMinOccurs() == 1)) {
- QName name = createQNameCorbaNamespace(getModulePrefix(membertype)
- + element.getQName().getLocalPart() + "Array");
-
- // workaround for now - sent bug to WSCommons - the elements
- // QName should have its namespace included.
- QName schemaName = element.getQName();
- if (schemaName.getNamespaceURI().equals("")) {
- schemaName = new QName(xmlSchemaList.get(0).getTargetNamespace(),
- schemaName.getLocalPart());
- }
-
- CorbaTypeImpl arraytype = null;
- if (memName != null) {
- arraytype = createArray(name, schemaName, memName,
- element.getMaxOccurs(), element.getMinOccurs(), false);
- } else {
- arraytype = createArray(name, schemaName, membertype.getQName(),
- element.getMaxOccurs(), element.getMinOccurs(), false);
- }
-
- membertype.setName(arraytype.getName());
- membertype.setQName(arraytype.getQName());
- membertype.setType(arraytype.getType());
-
- if (arraytype != null) {
- arraytype.setQName(null);
- if (!isDuplicate(arraytype)) {
- typeMappingType.getStructOrExceptionOrUnion().add(arraytype);
- }
- }
- }
-
- return membertype;
- }
-
-
- public XmlSchemaType getSchemaType(QName name) throws Exception {
- XmlSchemaType type = null;
- Iterator i = xmlSchemaList.iterator();
- while (i.hasNext()) {
- XmlSchema xmlSchema = (XmlSchema)i.next();
- String nspace = xmlSchema.getTargetNamespace();
- QName tname = createQName(nspace, name.getLocalPart(), "xsd");
- type = findSchemaType(tname);
- if (type != null) {
- break;
- }
- }
- return type;
- }
-
- private String getModulePrefix(CorbaTypeImpl type) {
- String name = type.getQName().getLocalPart();
- int dotPos = name.lastIndexOf(".");
- return dotPos == -1 ? "" : name.substring(0, dotPos + 1);
- }
-
-
- protected CorbaTypeImpl processSequenceType(XmlSchemaSequence seq,
- QName defaultName, QName schemaTypeName)
- throws Exception {
- CorbaTypeImpl type = null;
- QName seqName = null;
-
- if (schemaTypeName == null) {
- seqName = createQNameTargetNamespace(defaultName.getLocalPart() + "SequenceStruct");
- } else {
- seqName = createQName(schemaTypeName.getNamespaceURI(),
- schemaTypeName.getLocalPart() + "SequenceStruct",
- schemaTypeName.getPrefix());
- }
-
- schemaTypeName = checkPrefix(schemaTypeName);
- Struct struct = new Struct();
- struct.setName(seqName.getLocalPart());
- struct.setQName(seqName);
- struct.setRepositoryID(repoString + seqName.getLocalPart().replace('.', '/') + idlversion);
- struct.setType(schemaTypeName);
-
- List members = processContainerAsMembers(seq, defaultName, schemaTypeName);
- for (Iterator iterator = members.iterator(); iterator.hasNext();) {
- MemberType memberType = (MemberType)iterator.next();
- struct.getMember().add(memberType);
- }
-
- type = struct;
-
- if (!"1".equals(seq.getMaxOccurs()) || !"1".equals(seq.getMinOccurs())) {
- QName name = createQNameTargetNamespace(type.getQName().getLocalPart() + "Array");
- CorbaTypeImpl atype = createArray(name, type.getQName(), type.getQName(),
- seq.getMaxOccurs(), seq.getMinOccurs(), false);
-
- if (atype != null) {
- atype.setQName(null);
- if (!isDuplicate(atype)) {
- typeMappingType.getStructOrExceptionOrUnion().add(atype);
- }
- }
- }
-
- if ((type instanceof Struct) && (struct.getMember().size() == 0)) {
- String msgStr = "Cannot create CORBA Struct" + struct.getName()
- + "from container with no members";
- org.apache.cxf.common.i18n.Message msg = new org.apache.cxf.common.i18n.Message(
- msgStr, LOG);
- throw new Exception(msg.toString());
- }
-
- return type;
- }
-
-
- protected CorbaTypeImpl processAllType(XmlSchemaAll seq, QName defaultName,
- QName schematypeName) throws Exception {
- QName allName = null;
- Struct type = null;
-
- if (schematypeName == null) {
- allName = createQNameCorbaNamespace(defaultName.getLocalPart() + "AllStruct");
- } else {
- allName = createQNameCorbaNamespace(schematypeName.getLocalPart() + "AllStruct");
- }
-
- type = new Struct();
- type.setName(allName.getLocalPart());
- type.setQName(allName);
- type.setType(schematypeName);
-
- List members = processContainerAsMembers(seq, defaultName, schematypeName);
- for (Iterator iterator = members.iterator(); iterator.hasNext();) {
- MemberType memberType = (MemberType)iterator.next();
- type.getMember().add(memberType);
- }
-
- String repoId = repoString + type.getQName().getLocalPart().replace('.', '/') + idlversion;
- type.setRepositoryID(repoId);
- return type;
- }
-
- private CorbaTypeImpl processPrimitiveType(QName typeName) {
- QName qName = createQNameXmlSchemaNamespace(typeName.getLocalPart());
- CorbaTypeImpl corbatype = (CorbaTypeImpl)CORBAPRIMITIVEMAP.get(qName);
- if (corbatype == null) {
- if (typeName.equals(W3CConstants.NT_SCHEMA_DECIMAL)) {
- QName name = new QName(idlNamespace, "fixed_1");
- corbatype = wsdltypes.getFixedCorbaType(name, typeName, 31, 6);
- } else if (typeName.equals(W3CConstants.NT_SCHEMA_BASE64)
- || typeName.equals(W3CConstants.NT_SCHEMA_HBIN)) {
- //|| typeName.equals(SOAPConstants.NT_SOAP_BASE64)
- //|| typeName.equals(SOAPConstants.NT_SOAP_HBIN)) {
- QName name = new QName(idlNamespace, typeName.getLocalPart() + "Seq");
- corbatype = wsdltypes.getOctetCorbaType(name, typeName, 0);
- }
-
- }
- return corbatype;
- }
-
- protected List<MemberType> processAttributesAsMembers(Iterator attrs) throws Exception {
- QName memName = null;
- List <MemberType>members = new ArrayList<MemberType>();
-
- while (attrs.hasNext()) {
- XmlSchemaAttribute attribute = (XmlSchemaAttribute)attrs.next();
- CorbaTypeImpl membertype = null;
-
- if (attribute.getUse().getValue().equals("none")
- || attribute.getUse().getValue().equals(W3CConstants.USE_OPTIONAL)) {
- CorbaTypeImpl attType = null;
- if (attribute.getSchemaType() != null) {
- attType = convertSchemaToCorbaType(attribute.getSchemaType(),
- attribute.getQName(),
- attribute.getSchemaType(), null, true);
- if (attType != null) {
- QName typeName = attType.getQName();
- attType.setQName(null);
- if (!isDuplicate(attType)) {
- typeMappingType.getStructOrExceptionOrUnion().add(attType);
- }
- QName name = createQNameTargetNamespace(typeName.getLocalPart() + "_nil");
- membertype = createNillableUnion(name, attribute.getQName(),
- createQNameCorbaNamespace(typeName.getLocalPart()));
- }
- } else {
- attType = processPrimitiveType(attribute.getSchemaTypeName());
- QName name = createQNameTargetNamespace(attType.getQName().getLocalPart() + "_nil");
- membertype = createNillableUnion(name, attribute.getQName(),
- attType.getQName());
-
- }
- memName = createQNameCorbaNamespace(membertype.getQName().getLocalPart());
- if (membertype != null) {
- membertype.setQName(null);
- if (!isDuplicate(membertype)) {
- typeMappingType.getStructOrExceptionOrUnion().add(membertype);
- }
- }
- } else {
- if (attribute.getSchemaType() != null) {
- membertype = convertSchemaToCorbaType(attribute.getSchemaType(), attribute.getQName(),
- attribute.getSchemaType(), null, false);
- } else {
- membertype = processPrimitiveType(attribute.getSchemaTypeName());
- }
- }
-
- if (membertype != null) {
- MemberType member;
- String memberName = attribute.getQName().getLocalPart();
-
- member = new MemberType();
- member.setName(memberName);
- if (memName != null) {
- member.setIdltype(memName);
- } else {
- member.setIdltype(membertype.getQName());
- }
- members.add(member);
- } else {
- String msg = "Unsupported Attribute Found in CORBA Binding Generation:"
- + attribute.getQName();
- LOG.log(Level.WARNING, msg.toString());
- }
- }
-
- return members;
- }
- private CorbaTypeImpl processElementType(XmlSchemaElement stype, QName defaultName)
- throws Exception {
-
- QName schematypeName;
-
- if (stype.getName() == null) {
- schematypeName = defaultName;
- } else {
- schematypeName = createQNameTargetNamespace(stype.getName());
- }
-
- return convertSchemaToCorbaType(stype.getSchemaType(), schematypeName,
- stype.getSchemaType(), null, false);
-
- }
-
- private CorbaTypeImpl processSimpleType(XmlSchemaSimpleType stype, QName defaultName,
- boolean anonymous)
- throws Exception {
-
- CorbaTypeImpl corbaTypeImpl = null;
- QName name;
- QName schematypeName = null;
-
- if (stype.getQName() == null) {
- schematypeName = defaultName;
- name = createQNameTargetNamespace(defaultName.getLocalPart() + "Type");
- } else {
- schematypeName = checkPrefix(stype.getQName());
- if (schematypeName == null) {
- schematypeName = stype.getQName();
- }
- name = createQNameCorbaNamespace(schematypeName.getLocalPart());
- }
-
- if (stype.getContent() instanceof XmlSchemaSimpleTypeRestriction) {
- corbaTypeImpl = processSimpleRestrictionType(stype, name, schematypeName, anonymous);
- } else if (stype.getContent() instanceof XmlSchemaSimpleTypeList) {
- XmlSchemaSimpleTypeList ltype = (XmlSchemaSimpleTypeList)stype.getContent();
- CorbaTypeImpl itemType = null;
- if (ltype.getItemType() != null) {
- itemType = convertSchemaToCorbaType(ltype.getItemType(), name, stype, null, false);
- if (itemType != null) {
- return wsdltypes.mapToSequence(name, checkPrefix(schematypeName),
- itemType.getQName(), 0, false);
- }
- return itemType;
- }
- QName ltypeName = createQNameXmlSchemaNamespace(ltype.getItemTypeName().getLocalPart());
- itemType = processPrimitiveType(ltypeName);
- return wsdltypes.mapToSequence(name, checkPrefix(schematypeName), itemType.getQName(), 0, false);
- } else if (stype.getContent() == null) {
- // elements primitive type
- QName stypeName = createQNameXmlSchemaNamespace(stype.getName());
- corbaTypeImpl = getLocalType(stypeName);
- } else {
- System.out.println("SimpleType Union Not Supported in CORBA Binding");
- }
- return corbaTypeImpl;
-
- }
-
- private CorbaTypeImpl processSimpleRestrictionType(XmlSchemaSimpleType stype,
- QName name, QName schematypeName,
- boolean anonymous)
- throws Exception {
- CorbaTypeImpl corbaTypeImpl = null;
-
- // checks if enumeration
- XmlSchemaSimpleTypeRestriction restrictionType = (XmlSchemaSimpleTypeRestriction)stype
- .getContent();
-
- QName baseName = checkPrefix(restrictionType.getBaseTypeName());
-
- String maxLength = null;
- String length = null;
-
- Iterator i = restrictionType.getFacets().getIterator();
- while (i.hasNext()) {
- XmlSchemaFacet val = (XmlSchemaFacet)i.next();
- if (val instanceof XmlSchemaMaxLengthFacet) {
- maxLength = val.getValue().toString();
- }
- if (val instanceof XmlSchemaLengthFacet) {
- length = val.getValue().toString();
- }
- }
-
- if (isEnumeration(restrictionType)) {
- corbaTypeImpl = createCorbaEnum(restrictionType, name, schematypeName);
- } else {
- if (restrictionType.getBaseType() != null) {
- corbaTypeImpl = convertSchemaToCorbaType(restrictionType.getBaseType(), schematypeName,
- stype, null, false);
- } else {
- corbaTypeImpl = processPrimitiveType(baseName);
- if (corbaTypeImpl == null) {
- XmlSchemaType schematype = findSchemaType(baseName);
- corbaTypeImpl = convertSchemaToCorbaType(schematype, schematypeName,
- schematype, null, false);
- }
- }
-
- if (corbaTypeImpl != null) {
- if (corbaTypeImpl.getType().equals(W3CConstants.NT_SCHEMA_STRING)
- || (baseName.equals(W3CConstants.NT_SCHEMA_STRING))) {
- corbaTypeImpl =
- wsdltypes.processStringType(corbaTypeImpl, name, maxLength, length);
- } else if (corbaTypeImpl.getType().equals(W3CConstants.NT_SCHEMA_DECIMAL)
- || (baseName.equals(W3CConstants.NT_SCHEMA_DECIMAL))) {
- corbaTypeImpl = wsdltypes.processDecimalType(restrictionType, name,
- corbaTypeImpl, anonymous);
- } else if ((corbaTypeImpl.getType().equals(W3CConstants.NT_SCHEMA_BASE64))
- || (baseName.equals(W3CConstants.NT_SCHEMA_BASE64))
- || (corbaTypeImpl.getType().equals(W3CConstants.NT_SCHEMA_HBIN))
- || (corbaTypeImpl.getType().equals(W3CConstants.NT_SCHEMA_HBIN))) {
- corbaTypeImpl = wsdltypes.processBase64Type(corbaTypeImpl,
- name, maxLength, length);
- }
- }
- }
-
- return corbaTypeImpl;
- }
-
- private CorbaTypeImpl getLocalType(QName qname) {
- return processPrimitiveType(qname);
- }
-
- private Enum createCorbaEnum(XmlSchemaSimpleTypeRestriction restrictionType, QName name,
- QName schematypeName) {
- Enum corbaEnum = new Enum();
- corbaEnum.setType(schematypeName);
- corbaEnum.setName(name.getLocalPart());
- corbaEnum.setQName(name);
-
- corbaEnum.setRepositoryID(repoString + name.getLocalPart().replace('.', '/') + idlversion);
- Iterator enums = restrictionType.getFacets().getIterator();
-
- while (enums.hasNext()) {
- XmlSchemaEnumerationFacet val = (XmlSchemaEnumerationFacet)enums.next();
- Enumerator enumerator = new Enumerator();
- enumerator.setValue(val.getValue().toString());
- corbaEnum.getEnumerator().add(enumerator);
- }
- return corbaEnum;
- }
-
- private boolean isEnumeration(XmlSchemaSimpleTypeRestriction restriction) {
-
- if ((restriction == null) || (restriction.getFacets().getCount() == 0)
- || (restriction.getBaseTypeName() == null)) {
- return false;
- }
-
- Iterator it = restriction.getFacets().getIterator();
- while (it.hasNext()) {
- XmlSchemaFacet facet = (XmlSchemaFacet)it.next();
- if (facet instanceof XmlSchemaEnumerationFacet) {
- return true;
- }
- }
- return false;
- }
-
-
- private XmlSchemaType lookUpType(Part part) {
- XmlSchemaType schemaType = null;
-
- Iterator i = xmlSchemaList.iterator();
- while (i.hasNext()) {
- XmlSchema xmlSchema = (XmlSchema)i.next();
-
- if (part.getElementName() != null) {
- XmlSchemaElement schemaElement = xmlSchema.getElementByName(part.getElementName());
- if (schemaElement != null) {
- schemaType = schemaElement.getSchemaType();
- }
- } else {
- if (part.getTypeName() != null) {
- schemaType = xmlSchema.getTypeByName(part.getTypeName());
- }
- }
- if (schemaType != null) {
- return schemaType;
- }
- }
-
- return schemaType;
- }
-
- private XmlSchemaType findSchemaType(QName typeName) {
- XmlSchemaType schemaType = null;
-
- Iterator i = xmlSchemaList.iterator();
- while (i.hasNext()) {
- XmlSchema xmlSchema = (XmlSchema)i.next();
- if (xmlSchema.getElementByName(typeName) != null) {
- XmlSchemaElement schemaElement = xmlSchema.getElementByName(typeName);
- schemaType = schemaElement.getSchemaType();
- } else if (xmlSchema.getTypeByName(typeName) != null) {
- schemaType = xmlSchema.getTypeByName(typeName);
- }
- if (schemaType != null) {
- return schemaType;
- }
- }
- return schemaType;
- }
-
- private boolean isSchemaTypeException(XmlSchemaType stype) {
- boolean exception = false;
- XmlSchemaComplexType complex = null;
-
- if (stype instanceof XmlSchemaComplexType) {
- complex = (XmlSchemaComplexType)stype;
-
- if (!isLiteralArray(complex)
- && !wsdltypes.isOMGUnion(complex)
- && !wsdltypes.isUnion(complex)) {
- exception = true;
- }
- }
- return exception;
- }
-
-
- public boolean isLiteralArray(XmlSchemaComplexType type) {
- boolean array = false;
-
- if ((type.getAttributes().getCount() == 0)
- && (type.getParticle() instanceof XmlSchemaSequence)) {
- XmlSchemaSequence stype = (XmlSchemaSequence)type.getParticle();
-
- if ((stype.getItems().getCount() == 1)
- && (stype.getItems().getIterator().next() instanceof XmlSchemaElement)) {
- XmlSchemaElement el = (XmlSchemaElement)stype.getItems().getIterator().next();
- if (!(el.getMaxOccurs() == 1)) {
- // it's a literal array
- array = true;
- }
- if (el.getMaxOccurs() == 1 && el.getMinOccurs() == 1) {
- if (type.getName() != null && wsdltypes.isAnonymous(type.getName())) {
- array = true;
- }
- }
- }
- }
- return array;
- }
-
- /**
- * Create a CORBA Array or Sequence based on min and max Occurs If minOccurs ==
- * maxOccurs == 1 then log warning and return null. Else if minOccurs is
- * equal to maxOccurs then create an Array. Else create a Sequence
- */
- protected CorbaTypeImpl createArray(QName name, QName schematypeName, QName arrayType,
- Long maxOccurs, Long minOccurs, boolean anonymous) {
-
- int max = maxOccurs.intValue();
- if (max == -1) {
- return wsdltypes.mapToSequence(name, schematypeName, arrayType, 0, anonymous);
- }
-
- int min = minOccurs.intValue();
-
- if (min == max) {
- if (max == 1) {
- if (!anonymous) {
- String msg = "Couldn't Map to Array:" + name + ":minOccurs="
- + minOccurs + ":maxOccurs=" + maxOccurs;
- LOG.log(Level.WARNING, msg.toString());
- return null;
- } else {
- return wsdltypes.mapToArray(name, checkPrefix(schematypeName), arrayType, max, anonymous);
- }
- } else {
- return wsdltypes.mapToArray(name, checkPrefix(schematypeName), arrayType, max, anonymous);
- }
- } else {
- return wsdltypes.mapToSequence(name, checkPrefix(schematypeName), arrayType, max, anonymous);
- }
- }
-
-
- private CorbaTypeImpl processComplexType(XmlSchemaComplexType complex, QName defaultName,
- XmlSchemaAnnotation annotation,
- boolean anonymous) throws Exception {
- CorbaTypeImpl corbatype = new CorbaTypeImpl();
-
- if (isLiteralArray(complex)) {
- corbatype = processLiteralArray(complex, defaultName, anonymous);
- } else if (wsdltypes.isOMGUnion(complex)) {
- corbatype = processOMGUnion(complex, defaultName);
- } else if (wsdltypes.isUnion(complex)) {
- corbatype = processRegularUnion(complex, defaultName);
- } else if (complex.getQName() != null && isIDLObjectType(complex.getQName())) {
- // process it.
- corbatype = wsdltypes.processObject(def, complex, annotation, checkPrefix(complex.getQName()),
- defaultName, idlNamespace);
- } else {
- // Deal the ComplexType as Struct
- corbatype = processStruct(complex, defaultName);
- }
-
- return corbatype;
- }
-
-
- private CorbaTypeImpl processStruct(XmlSchemaComplexType complex, QName defaultName)
- throws Exception {
- QName name;
- Struct corbaStruct = null;
- QName schematypeName = checkPrefix(complex.getQName());
-
- if (schematypeName == null) {
- schematypeName = checkPrefix(defaultName);
- name = checkPrefix(createQNameCorbaNamespace(defaultName.getLocalPart()));
- } else {
- name = checkPrefix(createQNameCorbaNamespace(schematypeName.getLocalPart()));
- }
-
- corbaStruct = new Struct();
- corbaStruct.setName(name.getLocalPart());
- corbaStruct.setQName(name);
- String repoId = repoString + name.getLocalPart().replace('.', '/') + idlversion;
- corbaStruct.setRepositoryID(repoId);
- corbaStruct.setType(schematypeName);
-
- if (complex.getContentModel() instanceof XmlSchemaSimpleContent) {
- corbaStruct = processSimpleContentStruct((XmlSchemaSimpleContent)complex.getContentModel(),
- defaultName, corbaStruct, schematypeName);
- } else if (complex.getContentModel() instanceof XmlSchemaComplexContent) {
- corbaStruct = processComplexContentStruct((XmlSchemaComplexContent)complex.getContentModel(),
- defaultName, corbaStruct, schematypeName);
- }
-
- // Process attributes at ComplexType level
- if (complex.getAttributes().getIterator() != null) {
- Iterator iterator = complex.getAttributes().getIterator();
- List attlist2 = processAttributesAsMembers(iterator);
- MemberType member = new MemberType();
- for (int i = 0; i < attlist2.size(); i++) {
- member = (MemberType)attlist2.get(i);
- corbaStruct.getMember().add(member);
- }
- }
-
- if (complex.getParticle() != null) {
- List members = processContainerAsMembers(complex.getParticle(), defaultName, schematypeName);
-
- for (Iterator it = members.iterator(); it.hasNext();) {
- MemberType memberType = (MemberType)it.next();
- corbaStruct.getMember().add(memberType);
- }
- }
-
- return corbaStruct;
- }
-
- protected Struct processSimpleContentStruct(XmlSchemaSimpleContent simpleContent,
- QName defaultName, Struct corbaStruct, QName schematypeName)
- throws Exception {
- XmlSchemaType base = null;
- List attrMembers = null;
- CorbaTypeImpl basetype = null;
-
- if (simpleContent.getContent() instanceof XmlSchemaSimpleContentExtension) {
- XmlSchemaSimpleContentExtension ext =
- (XmlSchemaSimpleContentExtension)simpleContent.getContent();
-
- if (ext.getBaseTypeName() != null) {
- basetype = processPrimitiveType(ext.getBaseTypeName());
- }
-
- // process ext types ????
- MemberType basemember = new MemberType();
- basemember.setName("_simpleTypeValue");
- basemember.setIdltype(basetype.getType());
- corbaStruct.getMember().add(basemember);
- attrMembers = processAttributesAsMembers(ext.getAttributes().getIterator());
- } else if (simpleContent.getContent() instanceof XmlSchemaSimpleContentRestriction) {
- XmlSchemaSimpleContentRestriction restrict
- = (XmlSchemaSimpleContentRestriction)simpleContent.getContent();
- basetype = convertSchemaToCorbaType(base, base.getQName(), base, null, false);
- base = restrict.getBaseType();
- basetype = convertSchemaToCorbaType(base, base.getQName(), base, null, false);
- MemberType basemember = new MemberType();
- basemember.setName("_simpleTypeValue");
- basemember.setIdltype(basetype.getType());
- corbaStruct.getMember().add(basemember);
- attrMembers = processAttributesAsMembers(restrict.getAttributes().getIterator());
- }
-
- //Deal with Attributes defined in Extension
- MemberType member = new MemberType();
- for (int i = 0; i < attrMembers.size(); i++) {
- member = (MemberType)attrMembers.get(i);
- corbaStruct.getMember().add(member);
- }
-
- //Process attributes at ComplexType level
- //List attlist2 = processAttributesAsMembers(simpleContent.unhandledAttributes.);
- //corbaStruct.getMembers().addAll(attlist2);
-
- return corbaStruct;
- }
-
- protected Struct processComplexContentStruct(XmlSchemaComplexContent complex, QName defaultName,
- Struct corbaStruct, QName schematypeName)
- throws Exception {
-
- if (complex.getContent() instanceof XmlSchemaComplexContentExtension) {
- XmlSchemaComplexContentExtension extype
- = (XmlSchemaComplexContentExtension)complex.getContent();
-
- // Add base as a member of this struct
- MemberType memberType = new MemberType();
- QName extName = extype.getBaseTypeName();
- memberType.setName(extName.getLocalPart() + "_f");
- if (extName.getLocalPart().equals("anyType")) {
- memberType.setIdltype(processPrimitiveType(extName).getQName());
- } else {
- memberType.setIdltype(createQNameCorbaNamespace(extName.getLocalPart()));
- }
- corbaStruct.getMember().add(memberType);
-
- // process attributes at complexContent level
- List attlist1 = processAttributesAsMembers(extype.getAttributes().getIterator());
- MemberType member = new MemberType();
- for (int i = 0; i < attlist1.size(); i++) {
- member = (MemberType)attlist1.get(i);
- corbaStruct.getMember().add(member);
- }
-
- // Process members of Current Type
- if (extype.getParticle() instanceof XmlSchemaChoice) {
- XmlSchemaChoice choice = (XmlSchemaChoice)extype.getParticle();
- MemberType choicemem = processComplexContentStructChoice(choice, schematypeName, defaultName);
- corbaStruct.getMember().add(choicemem);
- } else if (extype.getParticle() instanceof XmlSchemaSequence) {
- XmlSchemaSequence seq = (XmlSchemaSequence)extype.getParticle();
- CorbaTypeImpl seqtype =
- processSequenceType(seq, defaultName, schematypeName);
-
- if (seqtype != null) {
- MemberType seqmem = new MemberType();
- seqmem.setName(seqtype.getQName().getLocalPart() + "_f");
- QName type = createQNameCorbaNamespace(seqtype.getQName().getLocalPart());
- seqmem.setIdltype(type);
- corbaStruct.getMember().add(seqmem);
- if (!isDuplicate(seqtype)) {
- seqtype.setQName(null);
- typeMappingType.getStructOrExceptionOrUnion().add(seqtype);
- }
- } else {
- LOG.log(Level.WARNING, "Couldnt map Sequence inside extension");
- }
-
- } else if (extype.getParticle() instanceof XmlSchemaAll) {
- XmlSchemaAll all = (XmlSchemaAll)extype.getParticle();
-
- CorbaTypeImpl alltype = processAllType(all, defaultName, schematypeName);
- if (alltype != null) {
- MemberType allmem = new MemberType();
- allmem.setName(alltype.getQName().getLocalPart() + "_f");
- allmem.setIdltype(alltype.getQName());
- corbaStruct.getMember().add(allmem);
- if (!isDuplicate(alltype)) {
- alltype.setQName(null);
- typeMappingType.getStructOrExceptionOrUnion().add(alltype);
- }
- } else {
- LOG.log(Level.WARNING, "Couldnt map All inside extension");
- }
- }
-
- } else {
- org.apache.cxf.common.i18n.Message msg = new org.apache.cxf.common.i18n.Message(
- "Restriction inside ComplexContent is not yet Supported.", LOG);
- //throw new Exception(msg.toString());
- return null;
- }
-
- return corbaStruct;
- }
-
- protected MemberType processComplexContentStructChoice(XmlSchemaChoice choice,
- QName schematypeName, QName defaultName)
- throws Exception {
- QName choicename = createQNameTargetNamespace(schematypeName.getLocalPart() + "ChoiceType");
- Union choiceunion = createUnion(choicename, choice,
- defaultName, schematypeName);
-
- String repoId = repoString + choiceunion.getQName().getLocalPart().replace('.', '/')
- + idlversion;
- choiceunion.setRepositoryID(repoId);
-
- MemberType choicemem = new MemberType();
- choicemem.setName(choiceunion.getQName().getLocalPart() + "_f");
- choicemem.setIdltype(createQNameCorbaNamespace(choiceunion.getQName().getLocalPart()));
-
- if (!isDuplicate(choiceunion)) {
- choiceunion.setQName(null);
- typeMappingType.getStructOrExceptionOrUnion().add(choiceunion);
- }
-
- return choicemem;
- }
-
-
-
- private CorbaTypeImpl createNillableUnion(QName name, QName schemaType, QName membertype) {
-
- Union nilUnion = new Union();
- nilUnion.setName(name.getLocalPart());
- nilUnion.setType(schemaType);
- nilUnion.setQName(name);
- nilUnion.setDiscriminator(CorbaConstants.NT_CORBA_BOOLEAN);
- String id = repoString + nilUnion.getQName().getLocalPart().replace('.', '/') + idlversion;
- nilUnion.setRepositoryID(id);
-
- Unionbranch branch = new Unionbranch();
- branch.setName("value");
- branch.setIdltype(membertype);
- branch.setDefault(false);
- CaseType caseType = new CaseType();
- caseType.setLabel("TRUE");
- branch.getCase().add(caseType);
- nilUnion.getUnionbranch().add(branch);
-
- return nilUnion;
- }
-
- private CorbaTypeImpl processLiteralArray(XmlSchemaComplexType complex, QName defaultName,
- boolean anonymous) throws Exception {
- // NEED TO DO
- QName name;
- QName typeName = null;
- QName schematypeName = checkPrefix(complex.getQName());
-
- if (schematypeName == null) {
- schematypeName = defaultName;
- name = createQNameCorbaNamespace(defaultName.getLocalPart() + "Type");
- schematypeName = checkPrefix(schematypeName);
- name = checkPrefix(name);
- } else {
- name = createQNameCorbaNamespace(schematypeName.getLocalPart());
- name = checkPrefix(name);
- }
-
- CorbaTypeImpl arrayType = null;
- XmlSchemaElement arrayEl = null;
- if (complex.getParticle() instanceof XmlSchemaSequence) {
- XmlSchemaSequence seq = (XmlSchemaSequence)complex.getParticle();
-
- Iterator iterator = seq.getItems().getIterator();
- Iterator iter = seq.getItems().getIterator();
- while (iterator.hasNext()) {
- if (iter.next() instanceof XmlSchemaElement) {
- arrayEl = (XmlSchemaElement)iterator.next();
- XmlSchemaType atype = arrayEl.getSchemaType();
- if (atype == null) {
- atype = getSchemaType(arrayEl.getSchemaTypeName());
- }
- arrayType = convertSchemaToCorbaType(atype, arrayEl.getQName(),
- atype, null, true);
- typeName = arrayType.getQName();
- }
- }
- }
-
-
- if (arrayEl.isNillable()) {
- QName nilunionname = createQNameTargetNamespace(arrayType.getQName().getLocalPart() + "_nil");
- arrayType = createNillableUnion(nilunionname, arrayEl.getQName(),
- arrayType.getQName());
- typeName = createQNameCorbaNamespace(arrayType.getQName().getLocalPart());
- if (arrayType != null) {
- arrayType.setQName(null);
- if (!isDuplicate(arrayType)) {
- typeMappingType.getStructOrExceptionOrUnion().add(arrayType);
- }
- }
- }
-
- Long maxOccurs = null;
- Long minOccurs = null;
- if (arrayEl != null) {
- maxOccurs = arrayEl.getMaxOccurs();
- minOccurs = arrayEl.getMinOccurs();
- }
-
- return createArray(name, schematypeName,
- checkPrefix(typeName), maxOccurs, minOccurs, anonymous);
- }
-
- private CorbaTypeImpl processOMGUnion(XmlSchemaComplexType complex, QName defaultName) throws Exception {
- QName name;
- Union corbaUnion = null;
- QName schematypeName = checkPrefix(complex.getQName());
-
- if (schematypeName == null) {
- schematypeName = defaultName;
- name = createQNameTargetNamespace(defaultName.getLocalPart() + "Type");
- } else {
- name = createQNameTargetNamespace(schematypeName.getLocalPart());
- }
-
- corbaUnion = new Union();
- corbaUnion.setName(name.getLocalPart());
- corbaUnion.setQName(name);
- String id = repoString + name.getLocalPart().replace('.', '/') + idlversion;
- corbaUnion.setRepositoryID(id);
- corbaUnion.setType(schematypeName);
-
- XmlSchemaSequence stype = (XmlSchemaSequence)complex.getParticle();
- Iterator it = stype.getItems().getIterator();
- XmlSchemaParticle st1 = (XmlSchemaParticle)it.next();
- XmlSchemaParticle st2 = (XmlSchemaParticle)it.next();
- XmlSchemaElement discEl = null;
- XmlSchemaChoice choice = null;
-
- if (st1 instanceof XmlSchemaElement) {
- discEl = (XmlSchemaElement)st1;
- choice = (XmlSchemaChoice)st2;
- } else {
- discEl = (XmlSchemaElement)st2;
- choice = (XmlSchemaChoice)st1;
- }
-
- CorbaTypeImpl disctype = convertSchemaToCorbaType(discEl.getSchemaType(), discEl.getQName(), discEl
- .getSchemaType(), null, false);
- corbaUnion.setDiscriminator(disctype.getQName());
-
- List fields = processContainerAsMembers(choice, defaultName, schematypeName);
-
- List<String> caselist = new ArrayList<String>();
-
- if (disctype instanceof Enum) {
- Enum corbaenum = (Enum)disctype;
- Iterator iterator = corbaenum.getEnumerator().iterator();
-
- while (iterator.hasNext()) {
- Enumerator enumerator = (Enumerator)iterator.next();
- caselist.add(enumerator.getValue());
- }
- } else if (SUPPORTEDDISTYPES.contains(disctype.getQName().getLocalPart())) {
- if (disctype.getQName().getLocalPart().equals("long")
- || disctype.getQName().getLocalPart().equals("short")) {
- for (int i = 0; i < fields.size(); i++) {
- caselist.add(Integer.toString(i));
- }
- } else if (disctype.getQName().getLocalPart().equals("char")) {
- for (int i = 0; i < fields.size(); i++) {
- caselist.add(Integer.toString(i));
- }
- } else if (disctype.getQName().getLocalPart().equals("char")) {
- for (int i = 0; i < fields.size(); i++) {
- caselist.add(Integer.toString(i));
- }
- } else if (disctype.getQName().getLocalPart().equals("boolean")) {
- if (fields.size() == 2) {
- caselist.add("TRUE");
- caselist.add("FALSE");
- } else if (fields.size() == 1) {
- caselist.add("TRUE");
- } else {
- String msg = "Discriminator Type doesnt match number of Choices in Union:" + name;
- LOG.log(Level.WARNING, msg.toString());
- }
- }
- }
-
- wsdltypes.processUnionBranches(corbaUnion, fields, caselist);
-
- return corbaUnion;
- }
-
-
- private CorbaTypeImpl processRegularUnion(XmlSchemaComplexType complex,
- QName defaultName) throws Exception {
- //NEED TO DO
- QName name = null;
- QName schematypeName = complex.getQName();
-
- if (schematypeName == null) {
- schematypeName = defaultName;
- name = createQNameTargetNamespace(defaultName.getLocalPart() + "Type");
- } else {
- name = createQNameTargetNamespace(schematypeName.getLocalPart());
- }
-
- return createUnion(name, (XmlSchemaChoice)complex.getParticle(), defaultName, schematypeName);
- }
-
- protected Union createUnion(QName name, XmlSchemaChoice choice, QName defaultName,
- QName schematypeName)
- throws Exception {
- Union corbaUnion = new Union();
- corbaUnion.setName(name.getLocalPart());
- corbaUnion.setQName(name);
- corbaUnion.setType(schematypeName);
- String id = repoString + name.getLocalPart().replace('.', '/') + idlversion;
- corbaUnion.setRepositoryID(id);
-
- //Set Integer as Discriminator
- corbaUnion.setDiscriminator(CorbaConstants.NT_CORBA_LONG);
-
- List fields = processContainerAsMembers(choice, defaultName, schematypeName);
-
- //Choose an Integer as a Discriminator
- List<String> caselist = new ArrayList<String>();
-
- for (int i = 0; i < fields.size(); i++) {
- caselist.add(Integer.toString(i));
- }
-
- return wsdltypes.processUnionBranches(corbaUnion, fields, caselist);
- }
-
- private boolean isDuplicate(CorbaTypeImpl corbaTypeImpl) {
- String corbaName = corbaTypeImpl.getName();
- QName corbaType = corbaTypeImpl.getType();
-
- QName primName = createQNameXmlSchemaNamespace(corbaName);
- if ((CorbaTypeImpl)CORBAPRIMITIVEMAP.get(primName) != null) {
- return true;
- }
- if (!typeMappingType.getStructOrExceptionOrUnion().isEmpty()) {
- Iterator i = typeMappingType.getStructOrExceptionOrUnion().iterator();
- while (i.hasNext()) {
- CorbaTypeImpl type = (CorbaTypeImpl)i.next();
- if ((corbaName != null) && type.getType() != null
- && (corbaName.equals(type.getName()))
- && (corbaType.getLocalPart().equals(type.getType().getLocalPart()))
- && (corbaTypeImpl.getClass().getName().equals(type.getClass().getName()))) {
- return true;
- }
- }
- }
- return false;
- }
-
-
- private CorbaTypeImpl isDuplicateException(CorbaTypeImpl corbaTypeImpl) {
- CorbaTypeImpl duplicate = null;
- String corbaName = corbaTypeImpl.getName();
- String corbaType = corbaTypeImpl.getType().getLocalPart();
- if (!typeMappingType.getStructOrExceptionOrUnion().isEmpty()) {
- Iterator i = typeMappingType.getStructOrExceptionOrUnion().iterator();
- while (i.hasNext()) {
- CorbaTypeImpl type = (CorbaTypeImpl)i.next();
- if (corbaName.equals(type.getName())
- && corbaType.equals(type.getType().getLocalPart())) {
- if (type instanceof Struct) {
- return type;
- }
- }
- }
- }
- return duplicate;
- }
-
- protected QName checkPrefix(QName schematypeName) {
-
- QName name = schematypeName;
-
- if ((name != null) && (name.getPrefix() == null || name.getPrefix().equals(""))) {
- String prefix = def.getPrefix(name.getNamespaceURI());
- if (prefix != null) {
- return new QName(name.getNamespaceURI(), name.getLocalPart(), def.getPrefix(name
- .getNamespaceURI()));
- } else {
- return null;
- }
- }
-
- return name;
- }
-
public void setWsdlFile(String file) {
wsdlFileName = new String(file);
}
@@ -1833,6 +619,7 @@
idlNamespace = tns + "corba/typemap/";
}
+ setNamespace(idlNamespace);
}
public String getIdlNamespace() {
@@ -1858,29 +645,6 @@
def.addNamespace(pfx, namespaceURI);
}
- private boolean isIDLObjectType(QName typeName) {
- if (typeName.equals(ReferenceConstants.REFERENCE_TYPE)
- || typeName.equals(ReferenceConstants.WSADDRESSING_TYPE)) {
- return true;
- }
-
- return false;
- }
-
- public QName createQName(String name, String namespaceName, String prefix) {
- return new QName(name, namespaceName, prefix);
- }
- public QName createQNameCorbaNamespace(String name) {
- return new QName(getIdlNamespace(), name, def.getPrefix(getIdlNamespace()));
- }
-
- public QName createQNameTargetNamespace(String name) {
- return new QName(def.getTargetNamespace(), name, def.getPrefix(def.getTargetNamespace()));
- }
-
- public QName createQNameXmlSchemaNamespace(String name) {
- return new QName(W3CConstants.NU_SCHEMA_XSD, name, W3CConstants.NP_SCHEMA_XSD);
- }
public void setBindingName(String bname) {
bindingName = bname;
@@ -1954,7 +718,8 @@
}
public void setNamespace(String nameSpaceName) {
- idlNamespace = new String(nameSpaceName);
+ idlNamespace = nameSpaceName;
+ helper.setIdlNamespace(idlNamespace);
}
public void addInterfaceName(String interfaceName) {