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 dm...@apache.org on 2006/09/25 14:23:39 UTC
svn commit: r449687 - in
/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba:
CorbaBindingImpl.java CorbaUtils.java types/CorbaHandlerUtils.java
Author: dmiddlem
Date: Mon Sep 25 07:23:39 2006
New Revision: 449687
URL: http://svn.apache.org/viewvc?view=rev&rev=449687
Log:
Adding support for CORBA typedefs in the binding. (YOKO-173)
Modified:
incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaBindingImpl.java
incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaUtils.java
incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaHandlerUtils.java
Modified: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaBindingImpl.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaBindingImpl.java?view=diff&rev=449687&r1=449686&r2=449687
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaBindingImpl.java (original)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaBindingImpl.java Mon Sep 25 07:23:39 2006
@@ -52,10 +52,9 @@
import javax.xml.ws.WebServiceException;
import javax.xml.ws.handler.MessageContext;
+import org.apache.schemas.yoko.bindings.corba.Alias;
import org.apache.schemas.yoko.bindings.corba.Anonarray;
import org.apache.schemas.yoko.bindings.corba.Anonsequence;
-//import org.apache.schemas.yoko.bindings.corba.Anonstring;
-//import org.apache.schemas.yoko.bindings.corba.Anonwstring;
import org.apache.schemas.yoko.bindings.corba.Array;
import org.apache.schemas.yoko.bindings.corba.CaseType;
import org.apache.schemas.yoko.bindings.corba.Enum;
@@ -137,8 +136,8 @@
// now check for type maps in any imports
Map wsdlImports = wsdlDef.getImports();
Collection importValues = wsdlImports.values();
- for (Iterator importIterator = importValues.iterator(); importIterator.hasNext();) {
- List impList = (List)importIterator.next();
+ for (Iterator iter = importValues.iterator(); iter.hasNext();) {
+ List impList = (List)iter.next();
for (Iterator it = impList.iterator(); it.hasNext();) {
Import imp = (Import)it.next();
Definition impDef = imp.getDefinition();
@@ -251,8 +250,8 @@
}
int cbParamCount = 0;
- for (Iterator<ParamType> paramIter = params.iterator(); paramIter.hasNext();) {
- ParamType param = paramIter.next();
+ for (Iterator<ParamType> iter = params.iterator(); iter.hasNext();) {
+ ParamType param = iter.next();
QName elName = null;
Object partValue = null;
if (param.getMode().equals(ModeType.OUT) && hasOutParamReturn) {
@@ -347,10 +346,10 @@
QName exIdlType = null;
List<RaisesType> exList = opElement.getRaises();
- for (Iterator<RaisesType> i = exList.iterator(); i.hasNext();) {
+ for (Iterator<RaisesType> iter = exList.iterator(); iter.hasNext();) {
// REVISIT: Note that this assumes that exception names need to be unique. We should make
// sure that this is really the case.
- RaisesType raises = i.next();
+ RaisesType raises = iter.next();
if (raises.getException().getLocalPart().equals(elName.getLocalPart())) {
exIdlType = raises.getException();
}
@@ -596,6 +595,10 @@
obj = readPrimitiveFromStax(reader, idlType, tc);
} else {
switch(tc.kind().value()) {
+ case TCKind._tk_alias:
+ LOG.log(Level.INFO, "Reading alias type from XML reader");
+ obj = readAliasFromStax(reader, idlType, tc);
+ break;
case TCKind._tk_array:
LOG.log(Level.INFO, "Reading array type from XML reader");
obj = readArrayFromStax(reader, idlType, tc);
@@ -680,6 +683,7 @@
writer.add(startEl);
switch(tc.kind().value()) {
+ // Aliases should never get to this point so we don't need a special alias writer
case TCKind._tk_array:
LOG.log(Level.INFO, "Writing array type to XML writer");
writeArrayToStax(obj, writer, factory);
@@ -738,10 +742,10 @@
Characters charEl = reader.nextEvent().asCharacters();
reader.nextEvent().asEndElement();
if (tc.kind().value() == TCKind._tk_any) {
- Iterator attrIter = startEl.getAttributes();
+ Iterator iter = startEl.getAttributes();
String anySchemaType = null;
- while (attrIter.hasNext()) {
- Attribute attr = (Attribute)attrIter.next();
+ while (iter.hasNext()) {
+ Attribute attr = (Attribute)iter.next();
QName attrName = attr.getName();
if (attrName.getNamespaceURI().equals(XSI_NAMESPACE_URI)
&& attrName.getLocalPart().equals("type")) {
@@ -776,6 +780,23 @@
writer.add(charEvt);
}
+ public CorbaObjectHandler readAliasFromStax(XMLEventReader reader, QName idlType, TypeCode tc) {
+ CorbaObjectHandler obj = null;
+ CorbaTypeImpl typeDefinition = CorbaUtils.getCorbaType(idlType, typeMaps);
+
+ // We need to create an ObjectHandler from the base type of the typedef. So we recursively call
+ // the readObjectFromStax call. However, this is not a true nested read so still pass false as the
+ // nested flag.
+ try {
+ Alias aliasType = (Alias)typeDefinition;
+ obj = readObjectFromStax(reader, aliasType.getBasetype(), false);
+ } catch (java.lang.Exception ex) {
+ LOG.log(Level.SEVERE, "Received exception while reading object of type " + idlType);
+ throw new CorbaBindingException("Error while reading alias corba type", ex);
+ }
+ return obj;
+ }
+
public CorbaObjectHandler readAnonStringsFromStax(XMLEventReader reader, QName idlType, TypeCode tc) {
CorbaPrimitiveHandler obj = null;
@@ -838,8 +859,8 @@
throws XMLStreamException {
CorbaArrayHandler arrayHandler = (CorbaArrayHandler)obj;
List<CorbaObjectHandler> elements = arrayHandler.getElements();
- for (Iterator<CorbaObjectHandler> elementsIter = elements.iterator(); elementsIter.hasNext();) {
- writeObjectToStax(elementsIter.next(), writer, factory, true);
+ for (Iterator<CorbaObjectHandler> iter = elements.iterator(); iter.hasNext();) {
+ writeObjectToStax(iter.next(), writer, factory, true);
}
}
@@ -880,8 +901,9 @@
StartElement exStartEl = reader.nextEvent().asStartElement();
obj = new CorbaExceptionHandler(exStartEl.getName(), idlType, tc, exType);
List<MemberType> exMembers = exType.getMember();
- for (int i = 0; i < exMembers.size(); ++i) {
- CorbaObjectHandler member = readObjectFromStax(reader, exMembers.get(i).getIdltype(), true);
+ for (Iterator<MemberType> iter = exMembers.iterator(); iter.hasNext();) {
+ MemberType m = iter.next();
+ CorbaObjectHandler member = readObjectFromStax(reader, m.getIdltype(), true);
obj.addMember(member);
}
reader.nextEvent().asEndElement();
@@ -897,8 +919,8 @@
throws XMLStreamException {
CorbaExceptionHandler exObj = (CorbaExceptionHandler)obj;
List<CorbaObjectHandler> elements = exObj.getMembers();
- for (Iterator<CorbaObjectHandler> elementsIter = elements.iterator(); elementsIter.hasNext();) {
- writeObjectToStax(elementsIter.next(), writer, factory, true);
+ for (Iterator<CorbaObjectHandler> iter = elements.iterator(); iter.hasNext();) {
+ writeObjectToStax(iter.next(), writer, factory, true);
}
}
@@ -947,8 +969,8 @@
throws XMLStreamException {
CorbaSequenceHandler seqHandler = (CorbaSequenceHandler)obj;
List<CorbaObjectHandler> elements = seqHandler.getElements();
- for (Iterator<CorbaObjectHandler> elementsIter = elements.iterator(); elementsIter.hasNext();) {
- writeObjectToStax(elementsIter.next(), writer, factory, true);
+ for (Iterator<CorbaObjectHandler> iter = elements.iterator(); iter.hasNext();) {
+ writeObjectToStax(iter.next(), writer, factory, true);
}
}
@@ -962,10 +984,9 @@
StartElement structStartEl = reader.nextEvent().asStartElement();
obj = new CorbaStructHandler(structStartEl.getName(), idlType, tc, structType);
List<MemberType> structMembers = structType.getMember();
- for (int i = 0; i < structMembers.size(); ++i) {
- CorbaObjectHandler member = readObjectFromStax(reader,
- structMembers.get(i).getIdltype(),
- true);
+ for (Iterator<MemberType> iter = structMembers.iterator(); iter.hasNext();) {
+ MemberType m = iter.next();
+ CorbaObjectHandler member = readObjectFromStax(reader, m.getIdltype(), true);
obj.addMember(member);
}
reader.nextEvent().asEndElement();
@@ -981,8 +1002,8 @@
throws XMLStreamException {
CorbaStructHandler structHandler = (CorbaStructHandler)obj;
List<CorbaObjectHandler> elements = structHandler.getMembers();
- for (Iterator<CorbaObjectHandler> elementsIter = elements.iterator(); elementsIter.hasNext();) {
- writeObjectToStax(elementsIter.next(), writer, factory, true);
+ for (Iterator<CorbaObjectHandler> iter = elements.iterator(); iter.hasNext();) {
+ writeObjectToStax(iter.next(), writer, factory, true);
}
}
@@ -1010,8 +1031,8 @@
StartElement branchElement = reader.peek().asStartElement();
String branchName = branchElement.getName().getLocalPart();
List<Unionbranch> branches = unionType.getUnionbranch();
- for (Iterator<Unionbranch> branchesIter = branches.iterator(); branchesIter.hasNext();) {
- Unionbranch branch = branchesIter.next();
+ for (Iterator<Unionbranch> iter = branches.iterator(); iter.hasNext();) {
+ Unionbranch branch = iter.next();
CorbaObjectHandler branchObj = null;
if (branch.getName().equals(branchName)) {
branchObj = readObjectFromStax(reader, branch.getIdltype(), true);
Modified: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaUtils.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaUtils.java?view=diff&rev=449687&r1=449686&r2=449687
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaUtils.java (original)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaUtils.java Mon Sep 25 07:23:39 2006
@@ -51,7 +51,6 @@
import org.apache.schemas.yoko.bindings.corba.Exception;
import org.apache.schemas.yoko.bindings.corba.Fixed;
import org.apache.schemas.yoko.bindings.corba.MemberType;
-import org.apache.schemas.yoko.bindings.corba.NamedType;
import org.apache.schemas.yoko.bindings.corba.OperationType;
import org.apache.schemas.yoko.bindings.corba.Sequence;
import org.apache.schemas.yoko.bindings.corba.Struct;
@@ -114,10 +113,8 @@
return orb.get_primitive_tc(kind);
}
- // There is a possiblitity that the idl type will not have its namespace
- // URI set if it has
- // been read directly from the WSDL file as a string. Try with the
- // standard corba namespace URI.
+ // There is a possiblitity that the idl type will not have its namespace URI set if it has
+ // been read directly from the WSDL file as a string. Try with the standard corba namespace URI.
if (type.getNamespaceURI() == null) {
QName uriIdltype = new QName(CorbaConstants.NU_WSDL_CORBA, type.getLocalPart(), type.getPrefix());
@@ -137,7 +134,9 @@
// rules
if (obj instanceof Alias) {
Alias aliasType = (Alias)obj;
- tc = getTypeCode(orb, aliasType.getBasetype(), typeMaps);
+ tc = orb.create_alias_tc(aliasType.getRepositoryID(),
+ aliasType.getName(),
+ getTypeCode(orb, aliasType.getBasetype(), typeMaps));
} else if (obj instanceof Anonarray) {
Anonarray anonArrayType = (Anonarray)obj;
tc = orb.create_array_tc((int) anonArrayType.getBound(),
@@ -264,8 +263,7 @@
// TODO: Throw exception since this is an unsupported discriminator type
}
// Yoko orb is strict on how the case labels are stored for each member. So we can't
- // simply insert the labels as strings
- //member.label.insert_string(cs.getLabel());
+ // simply insert the labels as strings
members.put(cs.getLabel(), member);
}
}
@@ -295,38 +293,6 @@
return false;
}
- public static QName getMemberIdlType(NamedType obj, QName name) {
- // NOTE: Does this really only apply to structs, exceptions, and unions?
-
- if (obj instanceof Struct) {
- Struct structType = (Struct)obj;
- List<MemberType> members = structType.getMember();
- for (int i = 0; i < members.size(); ++i) {
- MemberType m = members.get(i);
- if (m.getName().equals(name)) {
- return m.getIdltype();
- }
- }
- } else if (obj instanceof Exception) {
- Exception exceptType = (Exception)obj;
- List<MemberType> members = exceptType.getMember();
- for (int i = 0; i < members.size(); ++i) {
- MemberType m = members.get(i);
- if (m.getName().equals(name)) {
- return m.getIdltype();
- }
- }
- } else if (obj instanceof Union) {
- // TODO
- } else if (obj instanceof Sequence) {
- // TODO
- } else if (obj instanceof Array) {
- Array arrayType = (Array)obj;
- return arrayType.getElemtype();
- }
- return null;
- }
-
public static CorbaTypeImpl getCorbaType(QName idlType, List<CorbaTypeMap> typeMaps) {
CorbaTypeMap currentMap = null;
for (int i = 0; i < typeMaps.size(); ++i) {
@@ -339,66 +305,6 @@
return null;
}
- public static NamedType getMemberCorbaType(NamedType obj, QName name, List<CorbaTypeMap> typeMaps) {
- NamedType type = null;
-
- if (obj instanceof Struct) {
- Struct structType = (Struct) obj;
- List<MemberType> members = structType.getMember();
- QName memberType = null;
- for (int i = 0; i < members.size(); ++i) {
- if (members.get(i).getName().equals(name)) {
- memberType = members.get(i).getIdltype();
- break;
- }
- }
-
- if (!isPrimitiveIdlType(memberType) && memberType != null) {
- for (int i = 0; i < typeMaps.size(); ++i) {
- if (typeMaps.get(i).getTargetNamespace().equals(memberType.getNamespaceURI())) {
- type = (NamedType) typeMaps.get(i).getType(memberType.getLocalPart());
- break;
- }
- }
- }
- } else if (obj instanceof Exception) {
- Exception exceptType = (Exception) obj;
- List<MemberType> members = exceptType.getMember();
- QName memberType = null;
- for (int i = 0; i < members.size(); ++i) {
- if (members.get(i).getName().equals(name)) {
- memberType = members.get(i).getIdltype();
- break;
- }
- }
-
- if (!isPrimitiveIdlType(memberType) && memberType != null) {
- for (int i = 0; i < typeMaps.size(); ++i) {
- if (typeMaps.get(i).getTargetNamespace().equals(memberType.getNamespaceURI())) {
- type = (NamedType)typeMaps.get(i).getType(memberType.getLocalPart());
- break;
- }
- }
- }
- } else if (obj instanceof Union) {
- // TODO: Exception for the current milestone
- } else if (obj instanceof Array) {
- Array arrayType = (Array)obj;
- QName arrayIdlType = arrayType.getElemtype();
-
- if (!isPrimitiveIdlType(arrayIdlType) && arrayIdlType != null) {
- for (int i = 0; i < typeMaps.size(); ++i) {
- if (typeMaps.get(i).getTargetNamespace().equals(arrayIdlType.getNamespaceURI())) {
- type = (NamedType)typeMaps.get(i).getType(arrayIdlType.getLocalPart());
- break;
- }
- }
- }
- }
-
- return type;
- }
-
public static AddressType getCorbaAddressType(Bus bus, EndpointReferenceType endpointRef) {
AddressType addrType = null;
try {
@@ -466,14 +372,14 @@
public static void getTypeMapFromDefinition(List<CorbaTypeMap> typeMaps, Definition wsdlDef) {
List extElements = wsdlDef.getExtensibilityElements();
- for (int i = 0; i < extElements.size(); ++i) {
- Object e = extElements.get(i);
+ for (Iterator iter = extElements.iterator(); iter.hasNext();) {
+ Object e = iter.next();
if (e instanceof TypeMappingType) {
TypeMappingType tmType = (TypeMappingType) e;
CorbaTypeMap map = null;
- for (Iterator iter = typeMaps.iterator(); iter.hasNext();) {
- CorbaTypeMap tm = (CorbaTypeMap)iter.next();
+ for (Iterator<CorbaTypeMap> it = typeMaps.iterator(); it.hasNext();) {
+ CorbaTypeMap tm = it.next();
if (tm.getTargetNamespace().equals(tmType.getTargetNamespace())) {
LOG.info("Found an existing typemap with the same namespace");
map = tm;
@@ -487,15 +393,13 @@
typeMaps.add(map);
}
- LOG.info("Found typemap in WSDL (Namespace: "
- + tmType.getTargetNamespace()
- + ", Prefix: "
- + wsdlDef.getPrefix(tmType.getTargetNamespace()));
+ LOG.info("Found typemap in WSDL (Namespace: " + tmType.getTargetNamespace()
+ + ", Prefix: " + wsdlDef.getPrefix(tmType.getTargetNamespace()));
- List types = tmType.getStructOrExceptionOrUnion();
+ List<CorbaTypeImpl> types = tmType.getStructOrExceptionOrUnion();
LOG.info("Found " + types.size() + " types defined in the typemap");
- for (int j = 0; j < types.size(); ++j) {
- CorbaTypeImpl corbaType = (CorbaTypeImpl)types.get(j);
+ for (Iterator<CorbaTypeImpl> it = types.iterator(); it.hasNext();) {
+ CorbaTypeImpl corbaType = it.next();
map.addType(corbaType.getName(), corbaType);
LOG.info("Adding type " + corbaType.getName());
}
@@ -539,9 +443,7 @@
try {
java.io.File file = new java.io.File(url);
if (!file.exists()) {
- throw new RuntimeException("Could not find file "
- + url
- + " to read the object reference");
+ throw new RuntimeException("Could not find file " + url + " to read the object reference");
}
java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.FileReader(file));
String ior = reader.readLine();
@@ -549,7 +451,7 @@
throw new RuntimeException("Invalid object reference found in file " + url);
}
result = orb.string_to_object(ior.trim());
- } catch (java.lang.Exception ex) {
+ } catch (java.io.IOException ex) {
throw new RuntimeException(ex);
}
return result;
Modified: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaHandlerUtils.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaHandlerUtils.java?view=diff&rev=449687&r1=449686&r2=449687
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaHandlerUtils.java (original)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaHandlerUtils.java Mon Sep 25 07:23:39 2006
@@ -23,6 +23,7 @@
import javax.xml.namespace.QName;
+import org.apache.schemas.yoko.bindings.corba.Alias;
import org.apache.schemas.yoko.bindings.corba.Anonarray;
import org.apache.schemas.yoko.bindings.corba.Anonsequence;
import org.apache.schemas.yoko.bindings.corba.Array;
@@ -59,6 +60,13 @@
CorbaTypeImpl type = CorbaUtils.getCorbaType(idlType, typeMaps);
switch (tc.kind().value()) {
+ case TCKind._tk_alias:
+ // For typedefs, we'll create the handler for the Object that is typedef'd. Reading and
+ // writing will use an Alias object and typecode, find the correct base type and then use
+ // this handler to marshal/unmarshal data
+ Alias aliasType = (Alias)type;
+ handler = createTypeHandler(orb, name, aliasType.getBasetype(), typeMaps);
+ break;
case TCKind._tk_array:
handler = new CorbaArrayHandler(name, idlType, tc, type);
break;