use of org.apache.cxf.binding.corba.wsdl.MemberType in project cxf by apache.
the class WSDLToIDLAction method createIdlException.
private IdlType createIdlException(org.apache.cxf.binding.corba.wsdl.Exception e, IdlScopeBase scope, String local) throws Exception {
IdlType result = null;
Object obj = scope.lookup(local);
if (obj != null && (obj instanceof IdlException)) {
result = (IdlType) obj;
} else {
IdlException exc = IdlException.create(scope, local);
scope.holdForScope(exc);
for (MemberType m : e.getMember()) {
QName qname = m.getIdltype();
IdlType type = findType(qname);
exc.addToScope(IdlField.create(exc, m.getName(), type));
}
result = exc;
scope.promoteHeldToScope();
}
return result;
}
use of org.apache.cxf.binding.corba.wsdl.MemberType in project cxf by apache.
the class ExceptionVisitor method visit.
public void visit(AST node) {
// <exception_dcl> ::= "exception" <identifier> "{" <member>* "}"
// <member> ::= <type_spec> <declarators> ";"
// <type_spec> visited by TypesVisitor
// Following should be visited by a separate visitor
// <declarators> ::= <declarator> { "," <declarator> }*
// <declarator> ::= <simple_declarator>
// | <complex_declarator>
// <simple_declarator> ::= <identifier>
// <complex_declarator> ::= <array_declarator>
// <array_declarator> ::= <identifier> <fixed_array_size>+
// <fixed_array_size> ::= "[" <positive_int_const> "]"
AST identifierNode = node.getFirstChild();
Scope exceptionScope = new Scope(getScope(), identifierNode);
// xmlschema:exception
Scope scopedName = new Scope(getScope(), identifierNode);
String exceptionName = mapper.mapToQName(scopedName);
XmlSchemaElement element = new XmlSchemaElement(schema, true);
element.setName(mapper.mapToQName(scopedName));
String exceptionTypeName = exceptionName + TYPE_SUFFIX;
XmlSchemaComplexType complexType = new XmlSchemaComplexType(schema, true);
complexType.setName(exceptionTypeName);
// complexType.setQName(new QName(schema.getTargetNamespace(), exceptionTypeName));
XmlSchemaSequence sequence = new XmlSchemaSequence();
complexType.setParticle(sequence);
element.setSchemaTypeName(complexType.getQName());
// corba:exception
org.apache.cxf.binding.corba.wsdl.Exception exception = new org.apache.cxf.binding.corba.wsdl.Exception();
exception.setQName(new QName(typeMap.getTargetNamespace(), exceptionName));
exception.setType(complexType.getQName());
exception.setRepositoryID(scopedName.toIDLRepositoryID());
// exception members
AST memberTypeNode = identifierNode.getNextSibling();
while (memberTypeNode != null) {
AST memberNode = TypesUtils.getCorbaTypeNameNode(memberTypeNode);
TypesVisitor visitor = new TypesVisitor(exceptionScope, definition, schema, wsdlVisitor, null);
visitor.visit(memberTypeNode);
XmlSchemaType stype = visitor.getSchemaType();
CorbaType ctype = visitor.getCorbaType();
Scope fullyQualifiedName = visitor.getFullyQualifiedName();
// needed for anonymous arrays in exceptions
if (ArrayVisitor.accept(memberNode)) {
Scope anonScope = new Scope(exceptionScope, TypesUtils.getCorbaTypeNameNode(memberTypeNode));
ArrayVisitor arrayVisitor = new ArrayVisitor(anonScope, definition, schema, wsdlVisitor, null, fullyQualifiedName);
arrayVisitor.setSchemaType(stype);
arrayVisitor.setCorbaType(ctype);
arrayVisitor.visit(memberNode);
stype = arrayVisitor.getSchemaType();
ctype = arrayVisitor.getCorbaType();
}
XmlSchemaElement member = createElementType(memberNode, stype, fullyQualifiedName);
sequence.getItems().add(member);
MemberType memberType = createMemberType(memberNode, ctype, fullyQualifiedName);
exception.getMember().add(memberType);
memberTypeNode = memberNode.getNextSibling();
}
// add exception to corba typemap
typeMap.getStructOrExceptionOrUnion().add(exception);
setSchemaType(complexType);
setCorbaType(exception);
createFaultMessage(element.getQName());
}
use of org.apache.cxf.binding.corba.wsdl.MemberType in project cxf by apache.
the class StructVisitor method createMemberType.
private MemberType createMemberType(AST memberNode, CorbaType corbaType, Scope fqName) {
// corba:member
String memberName = memberNode.toString();
MemberType memberType = new MemberType();
memberType.setName(memberName);
if (corbaType != null) {
memberType.setIdltype(corbaType.getQName());
} else {
wsdlVisitor.getDeferredActions().add(fqName, new StructDeferredAction(memberType));
}
return memberType;
}
use of org.apache.cxf.binding.corba.wsdl.MemberType in project cxf by apache.
the class CorbaHandlerUtils method initializeExceptionHandler.
public static void initializeExceptionHandler(ORB orb, CorbaObjectHandler obj, CorbaTypeMap typeMap, ServiceInfo serviceInfo, Map<QName, CorbaObjectHandler> seenTypes) {
Exception exceptType = (Exception) obj.getType();
List<MemberType> exceptMembers = exceptType.getMember();
QName typeName = exceptType.getType();
for (int i = 0; i < exceptMembers.size(); ++i) {
MemberType member = exceptMembers.get(i);
QName memberName;
if (member.isSetQualified() && member.isQualified() && (typeName != null)) {
memberName = new QName(typeName.getNamespaceURI(), member.getName());
} else {
memberName = new QName("", member.getName());
}
QName memberType = member.getIdltype();
CorbaObjectHandler memberObj = initializeObjectHandler(orb, memberName, memberType, typeMap, serviceInfo, seenTypes);
((CorbaExceptionHandler) obj).addMember(memberObj);
}
}
use of org.apache.cxf.binding.corba.wsdl.MemberType in project cxf by apache.
the class CorbaUtils method getComplexTypeCode.
public static TypeCode getComplexTypeCode(ORB orb, QName type, Object obj, CorbaTypeMap typeMap, Stack<QName> seenTypes) {
TypeCode tc = getAnonTypeCode(orb, type, obj, typeMap, seenTypes);
if (tc == null) {
if (obj instanceof Alias) {
Alias aliasType = (Alias) obj;
tc = orb.create_alias_tc(aliasType.getRepositoryID(), getTypeCodeName(aliasType.getName()), getTypeCode(orb, aliasType.getBasetype(), typeMap, seenTypes));
} else if (obj instanceof Array) {
Array arrayType = (Array) obj;
tc = orb.create_array_tc((int) arrayType.getBound(), getTypeCode(orb, arrayType.getElemtype(), typeMap, seenTypes));
} else if (obj instanceof Enum) {
Enum enumType = (Enum) obj;
String name = enumType.getName();
List<Enumerator> enums = enumType.getEnumerator();
String[] members = new String[enums.size()];
for (int i = 0; i < members.length; ++i) {
members[i] = enums.get(i).getValue();
}
name = getTypeCodeName(name);
tc = orb.create_enum_tc(enumType.getRepositoryID(), name, members);
} else if (obj instanceof Exception) {
Exception exceptType = (Exception) obj;
List<MemberType> list = exceptType.getMember();
StructMember[] members = new StructMember[list.size()];
for (int i = 0; i < members.length; ++i) {
MemberType member = list.get(i);
members[i] = new StructMember(member.getName(), getTypeCode(orb, member.getIdltype(), typeMap, seenTypes), null);
}
String name = getTypeCodeName(exceptType.getName());
tc = orb.create_exception_tc(exceptType.getRepositoryID(), name, members);
} else if (obj instanceof Fixed) {
Fixed fixedType = (Fixed) obj;
tc = orb.create_fixed_tc((short) fixedType.getDigits(), (short) fixedType.getScale());
} else if (obj instanceof org.apache.cxf.binding.corba.wsdl.Object) {
org.apache.cxf.binding.corba.wsdl.Object objType = (org.apache.cxf.binding.corba.wsdl.Object) obj;
if (objType.getName().equals("CORBA.Object")) {
tc = orb.create_interface_tc(objType.getRepositoryID(), "Object");
} else {
tc = orb.create_interface_tc(objType.getRepositoryID(), getTypeCodeName(objType.getName()));
}
} else if (obj instanceof Sequence) {
Sequence seqType = (Sequence) obj;
tc = orb.create_sequence_tc((int) seqType.getBound(), getTypeCode(orb, seqType.getElemtype(), typeMap, seenTypes));
} else if (obj instanceof Struct) {
Struct structType = (Struct) obj;
if (seenTypes.contains(new QName(structType.getName()))) {
tc = orb.create_recursive_tc(structType.getRepositoryID());
} else {
seenTypes.push(new QName(structType.getName()));
List<MemberType> list = structType.getMember();
StructMember[] members = new StructMember[list.size()];
for (int i = 0; i < members.length; ++i) {
MemberType member = list.get(i);
members[i] = new StructMember(member.getName(), getTypeCode(orb, member.getIdltype(), typeMap, seenTypes), null);
}
String name = getTypeCodeName(structType.getName());
tc = orb.create_struct_tc(structType.getRepositoryID(), name, members);
seenTypes.pop();
}
} else if (obj instanceof Union) {
tc = getUnionTypeCode(orb, obj, typeMap, seenTypes);
}
}
return tc;
}
Aggregations