/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cxf.tools.corba.processors.wsdl;
import java.io.File;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
import java.util.logging.Logger;
import javax.wsdl.Binding;
import javax.wsdl.BindingOperation;
import javax.wsdl.Definition;
import javax.xml.namespace.QName;
import org.apache.cxf.binding.corba.wsdl.Alias;
import org.apache.cxf.binding.corba.wsdl.Anonarray;
import org.apache.cxf.binding.corba.wsdl.Anonfixed;
import org.apache.cxf.binding.corba.wsdl.Anonsequence;
import org.apache.cxf.binding.corba.wsdl.Anonstring;
import org.apache.cxf.binding.corba.wsdl.ArgType;
import org.apache.cxf.binding.corba.wsdl.Array;
import org.apache.cxf.binding.corba.wsdl.BindingType;
import org.apache.cxf.binding.corba.wsdl.CaseType;
import org.apache.cxf.binding.corba.wsdl.Const;
import org.apache.cxf.binding.corba.wsdl.CorbaConstants;
import org.apache.cxf.binding.corba.wsdl.CorbaType;
import org.apache.cxf.binding.corba.wsdl.Enum;
import org.apache.cxf.binding.corba.wsdl.Enumerator;
import org.apache.cxf.binding.corba.wsdl.Fixed;
import org.apache.cxf.binding.corba.wsdl.MemberType;
import org.apache.cxf.binding.corba.wsdl.ParamType;
import org.apache.cxf.binding.corba.wsdl.RaisesType;
import org.apache.cxf.binding.corba.wsdl.Sequence;
import org.apache.cxf.binding.corba.wsdl.Struct;
import org.apache.cxf.binding.corba.wsdl.TypeMappingType;
import org.apache.cxf.binding.corba.wsdl.Union;
import org.apache.cxf.binding.corba.wsdl.Unionbranch;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.helpers.CastUtils;
import org.apache.cxf.tools.corba.common.idltypes.CorbaUtils;
import org.apache.cxf.tools.corba.common.idltypes.IdlAnonArray;
import org.apache.cxf.tools.corba.common.idltypes.IdlAnonFixed;
import org.apache.cxf.tools.corba.common.idltypes.IdlAnonSequence;
import org.apache.cxf.tools.corba.common.idltypes.IdlArray;
import org.apache.cxf.tools.corba.common.idltypes.IdlAttribute;
import org.apache.cxf.tools.corba.common.idltypes.IdlConst;
import org.apache.cxf.tools.corba.common.idltypes.IdlDefn;
import org.apache.cxf.tools.corba.common.idltypes.IdlEnum;
import org.apache.cxf.tools.corba.common.idltypes.IdlEnumerator;
import org.apache.cxf.tools.corba.common.idltypes.IdlException;
import org.apache.cxf.tools.corba.common.idltypes.IdlField;
import org.apache.cxf.tools.corba.common.idltypes.IdlFixed;
import org.apache.cxf.tools.corba.common.idltypes.IdlInterface;
import org.apache.cxf.tools.corba.common.idltypes.IdlModule;
import org.apache.cxf.tools.corba.common.idltypes.IdlOperation;
import org.apache.cxf.tools.corba.common.idltypes.IdlParam;
import org.apache.cxf.tools.corba.common.idltypes.IdlRoot;
import org.apache.cxf.tools.corba.common.idltypes.IdlScopeBase;
import org.apache.cxf.tools.corba.common.idltypes.IdlSequence;
import org.apache.cxf.tools.corba.common.idltypes.IdlString;
import org.apache.cxf.tools.corba.common.idltypes.IdlStruct;
import org.apache.cxf.tools.corba.common.idltypes.IdlType;
import org.apache.cxf.tools.corba.common.idltypes.IdlTypedef;
import org.apache.cxf.tools.corba.common.idltypes.IdlUnion;
import org.apache.cxf.tools.corba.common.idltypes.IdlUnionBranch;
import org.apache.cxf.tools.corba.utils.FileOutputStreamFactory;
import org.apache.cxf.tools.corba.utils.OutputStreamFactory;
public class WSDLToIDLAction {
protected static final Logger LOG = LogUtils.getL7dLogger(WSDLToIDLAction.class);
private static String bindingName;
private static String wsdlFileName;
private static String namespace;
private String outputFile;
private boolean verboseOn;
private PrintWriter printWriter;
private OutputStreamFactory factory = new FileOutputStreamFactory();
private Definition def;
private IdlRoot root = IdlRoot.create();
private IdlInterface intf;
private WSDLToTypeProcessor typeProcessor = new WSDLToTypeProcessor();
private boolean generateAllBindings;
public WSDLToIDLAction() {
}
public void generateIDL(Definition definition) throws Exception {
if (definition == null) {
typeProcessor.parseWSDL(wsdlFileName);
def = typeProcessor.getWSDLDefinition();
} else {
def = definition;
}
if (printWriter == null) {
printWriter = createPrintWriter(outputFile);
}
if (!isGenerateAllBindings()) {
Binding binding = findBinding(def);
if (binding == null) {
String msgStr = "Binding " + bindingName + " doesn't exists in WSDL.";
org.apache.cxf.common.i18n.Message msg = new org.apache.cxf.common.i18n.Message(msgStr, LOG);
throw new Exception(msg.toString());
}
generateIDL(def, binding);
} else {
// generate idl for all bindings in the file.
// each idl file will have the name of the binding.
Collection<Binding> bindings = CastUtils.cast(def.getAllBindings().values());
if (bindings.size() == 0) {
String msgStr = "No bindings exists within this WSDL.";
org.apache.cxf.common.i18n.Message msg = new org.apache.cxf.common.i18n.Message(msgStr, LOG);
throw new Exception(msg.toString());
} else {
List<QName> portTypes = new ArrayList<>();
for (Binding binding : bindings) {
List<?> ext = binding.getExtensibilityElements();
if (!(ext.get(0) instanceof BindingType)) {
continue;
}
if (portTypes.contains(binding.getPortType().getQName())) {
continue;
} else {
portTypes.add(binding.getPortType().getQName());
}
generateIDL(def, binding);
root = IdlRoot.create();
}
}
}
printWriter.close();
}
private void generateIDL(Definition definition, Binding binding) {
List<?> ext = binding.getExtensibilityElements();
if (!(ext.get(0) instanceof BindingType)) {
// throw an error not a corba binding
throw new RuntimeException(binding.getQName() + " is not a corba binding, "
+ "please pass a corba binding/porttype to use");
}
String nm[] = unscopeName(binding.getPortType().getQName().getLocalPart());
int pos = nm[nm.length - 1].lastIndexOf("Binding");
if (pos != -1) {
nm[nm.length - 1] = nm[nm.length - 1].substring(0, pos);
}
IdlScopeBase parent = root;
if (nm.length > 1) {
for (int i = 0; i < nm.length - 1; ++i) {
IdlModule mod = IdlModule.create(parent, nm[i]);
parent.addToScope(mod);
parent = mod;
}
}
intf = IdlInterface.create(parent, nm[nm.length - 1]);
parent.holdForScope(intf);
try {
getAllIdlTypes();
collectIdlDefns(binding);
root.flush();
} catch (Exception ex) {
ex.printStackTrace();
}
parent.promoteHeldToScope();
root.write(printWriter);
}
private void collectIdlDefns(Binding binding) throws Exception {
boolean isOneway = false;
Iterator<?> iterator = binding.getBindingOperations().iterator();
while (iterator.hasNext()) {
BindingOperation bindingOperation = (BindingOperation)iterator.next();
if (bindingOperation.getBindingOutput() == null) {
isOneway = true;
}
addOperation(bindingOperation, isOneway);
}
}
private void addOperation(BindingOperation bindingOperation,
boolean isOneway) throws Exception {
String name = null;
Iterator<?> i = bindingOperation.getExtensibilityElements().iterator();
while (i.hasNext()) {
org.apache.cxf.binding.corba.wsdl.OperationType opType =
(org.apache.cxf.binding.corba.wsdl.OperationType)i
.next();
name = opType.getName();
if (name.startsWith("_get_") || name.startsWith("_set_")) {
createIdlAttribute(opType, name);
} else {
createIdlOperation(opType, name, isOneway);
}
root.flush();
}
}
public void createIdlAttribute(org.apache.cxf.binding.corba.wsdl.OperationType
opType, String name) throws Exception {
String attrNm = name.substring(5, name.length());
IdlAttribute attr;
IdlDefn idlDef = intf.lookup(attrNm);
if (idlDef == null) {
if (name.startsWith("_get_")) {
ArgType t = opType.getReturn();
attr = IdlAttribute.create(intf, attrNm,
findType(t.getIdltype()), true);
} else {
ParamType arg = opType.getParam().iterator().next();
attr = IdlAttribute.create(intf, attrNm, findType(arg.getIdltype()), false);
}
intf.addAttribute(attr);
} else {
attr = (IdlAttribute)idlDef;
if (attr.readonly() && name.startsWith("_set_")) {
attr.setReadonly(false);
}
}
}
public void createIdlOperation(org.apache.cxf.binding.corba.wsdl.OperationType opType, String name,
boolean isOneway) throws Exception {
IdlOperation idlOp = IdlOperation.create(intf, opType.getName(), isOneway);
intf.holdForScope(idlOp);
ArgType crt = opType.getReturn();
if (crt != null) {
IdlType rt = findType(crt.getIdltype());
idlOp.addReturnType(rt);
}
for (ParamType arg : opType.getParam()) {
IdlType type = findType(arg.getIdltype());
String mode = arg.getMode().value();
IdlParam param = IdlParam.create(idlOp, arg.getName(), type, mode);
idlOp.addParameter(param);
}
for (RaisesType rs : opType.getRaises()) {
IdlType type = findType(rs.getException());
if (type instanceof IdlException) {
idlOp.addException((IdlException)type);
} else {
String msgStr = type.fullName() + " is not a type.";
org.apache.cxf.common.i18n.Message msg =
new org.apache.cxf.common.i18n.Message(msgStr, LOG);
throw new Exception(msg.toString());
}
}
root.flush();
intf.promoteHeldToScope();
}
private void getAllIdlTypes() throws Exception {
try {
TypeMappingType typeMappingType = getTypeMappingType();
if (typeMappingType != null) {
for (CorbaType corbaTypeImpl
: typeMappingType.getStructOrExceptionOrUnion()) {
findCorbaIdlType(corbaTypeImpl);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
private CorbaType getCorbaType(QName qname) throws Exception {
CorbaType corbaTypeImpl = null;
try {
TypeMappingType typeMappingType = getTypeMappingType();
if (typeMappingType != null) {
for (CorbaType corbaType : typeMappingType.getStructOrExceptionOrUnion()) {
if (corbaType.getName().equals(qname.getLocalPart())) {
return corbaType;
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return corbaTypeImpl;
}
private TypeMappingType getTypeMappingType() {
Iterator<?> types = def.getExtensibilityElements().iterator();
if (types != null) {
while (types.hasNext()) {
return (TypeMappingType)types.next();
}
}
return null;
}
private IdlType findType(QName qname) throws Exception {
String local = qname.getLocalPart();
return findIdlType(local, qname, null);
}
private IdlType findCorbaIdlType(CorbaType corbaTypeImpl) throws Exception {
String local = corbaTypeImpl.getName();
return findIdlType(local, corbaTypeImpl.getType(), corbaTypeImpl);
}
private IdlType findIdlType(String local, QName ntype,
CorbaType corbatypeImpl) throws Exception {
IdlType idlType = null;
if (ntype.getNamespaceURI().equals(CorbaConstants.NU_WSDL_CORBA)) {
try {
idlType = createPrimitiveType(ntype, local);
} catch (Exception ex) {
ex.printStackTrace();
}
} else {
if (CorbaUtils.isTimeBaseDef(local)) {
root.addInclude("<omg/TimeBase.idl>");
}
String name[] = unscopeName(local);
IdlDefn defn = root.lookup(name);
if (defn != null) {
if (defn instanceof IdlType) {
return (IdlType)defn;
} else {
String msgStr = local + " is an incorrect idltype.";
org.apache.cxf.common.i18n.Message msg =
new org.apache.cxf.common.i18n.Message(msgStr, LOG);
throw new Exception(msg.toString());
}
} else {
try {
idlType = createType(ntype, name, corbatypeImpl);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
return idlType;
}
protected IdlType createPrimitiveType(QName idlType, String name) throws Exception {
IdlDefn result = root.lookup(name);
if (result != null
&& (!(result instanceof IdlType))) {
String msgStr = idlType.getLocalPart() + " is an incorrect idltype.";
org.apache.cxf.common.i18n.Message msg =
new org.apache.cxf.common.i18n.Message(msgStr, LOG);
throw new Exception(msg.toString());
}
/**
* If we find a corba:dateTime then add the TimeBase.idl to the include
* list for the root.
*/
if (idlType.equals(CorbaConstants.NT_CORBA_DATETIME)) {
root.addInclude("<omg/TimeBase.idl>");
}
return (IdlType)result;
}
protected IdlType createType(QName idlType, String name[], CorbaType corbaType) throws Exception {
if (idlType.getLocalPart().equals("CORBA.Object")) {
return IdlInterface.create(null, "Object");
}
CorbaType corbaTypeImpl = corbaType;
if (corbaTypeImpl == null) {
corbaTypeImpl = getCorbaType(idlType);
}
if (corbaTypeImpl == null) {
String msgStr = "Type " + idlType.getLocalPart() + " not found.";
org.apache.cxf.common.i18n.Message msg =
new org.apache.cxf.common.i18n.Message(msgStr, LOG);
throw new Exception(msg.toString());
}
IdlScopeBase scope = root;
StringBuilder dotScopedName = new StringBuilder("");
for (int i = 0; i < name.length - 1; ++i) {
dotScopedName.append(name[i]);
// If we have the name CORBA, we need to make sure we are not handling the CORBA.Object
// name which is used for object references. If so, we don't want to generate a module
// since it is not a type we need to define in our IDL. This only happens when the
// name is "CORBA", we have a name array of length 2 and we are at the beginning of the
// name array.
if ("CORBA".equals(dotScopedName.toString())
&& name.length == 2 && i == 0
&& name[1].equals("Object")) {
break;
}
IdlDefn idlDef = scope.lookup(name[i]);
if (idlDef == null) {
// Before creating module, check to see if a Corba type
// represent this name aleady exists.
// For example if type is a.b.c and we are about to create
// module b, look to see if a.b
// is an interface that needs to be processed
QName qname = new QName(corbaTypeImpl.getType().getNamespaceURI(), dotScopedName.toString());
// Check to see if CORBAType exists. If so, create type for it
// otherwise
// create module for this scope
CorbaType possibleCorbaType = getCorbaType(qname);
if (possibleCorbaType != null) {
idlDef = findType(qname);
}
if (idlDef == null) {
idlDef = IdlModule.create(scope, name[i]);
scope.addToScope(idlDef);
}
}
dotScopedName.append(".");
scope = (IdlScopeBase)idlDef;
}
IdlType result = null;
String local = name[name.length - 1];
if (corbaTypeImpl instanceof Enum) {
result = createEnum((Enum)corbaTypeImpl, scope, local);
} else if (corbaTypeImpl instanceof Sequence) {
result = createSequence((Sequence)corbaTypeImpl, scope, local);
} else if (corbaTypeImpl instanceof Anonsequence) {
result = createAnonSequence((Anonsequence)corbaTypeImpl, scope, local);
} else if (corbaTypeImpl
instanceof org.apache.cxf.binding.corba.wsdl.Exception) {
result = createIdlException((org.apache.cxf.binding.corba.wsdl.Exception)corbaTypeImpl, scope, local);
} else if (corbaTypeImpl instanceof Struct) {
result = createStruct((Struct)corbaTypeImpl, scope, local);
} else if (corbaTypeImpl instanceof Union) {
result = createUnion((Union)corbaTypeImpl, scope, local);
} else if (corbaTypeImpl instanceof Alias) {
result = createTypedef((Alias)corbaTypeImpl, scope, local);
} else if (corbaTypeImpl instanceof Array) {
result = createArray((Array)corbaTypeImpl, scope, local);
} else if (corbaTypeImpl instanceof Anonarray) {
result = createAnonArray((Anonarray)corbaTypeImpl, scope, local);
} else if (corbaTypeImpl instanceof Fixed) {
result = createFixed((Fixed)corbaTypeImpl, scope, local);
} else if (corbaTypeImpl instanceof Anonfixed) {
result = createAnonFixed((Anonfixed)corbaTypeImpl, scope, local);
} else if (corbaTypeImpl instanceof Const) {
result = createConst((Const)corbaTypeImpl, scope, local);
} else {
result = checkAnon(corbaTypeImpl, scope, local);
}
if (result == null && corbaTypeImpl instanceof org.apache.cxf.binding.corba.wsdl.Object) {
result = createInterface((org.apache.cxf.binding.corba.wsdl.Object)corbaTypeImpl, scope, local);
}
return result;
}
private IdlType checkAnon(CorbaType corbaTypeImpl, IdlScopeBase scope,
String local) throws Exception {
IdlType result = null;
if (corbaTypeImpl instanceof Anonstring) {
Anonstring as = (Anonstring)corbaTypeImpl;
Long lbound = as.getBound();
int bound = lbound.intValue();
result = IdlString.create(bound);
}
return result;
}
private IdlType createInterface(org.apache.cxf.binding.corba.wsdl.Object obj, IdlScopeBase scope, String local)
throws Exception {
IdlType result = null;
QName bqname = obj.getBinding();
Binding binding = def.getBinding(bqname);
if (binding != null) {
IdlDefn defn = scope.lookup(local);
if (defn instanceof IdlInterface) {
return (IdlInterface)defn;
} else if (defn == null) {
try {
IdlInterface storedIntf = intf;
intf = IdlInterface.create(scope, local);
scope.holdForScope(intf);
collectIdlDefns(binding);
scope.promoteHeldToScope();
result = intf;
intf = storedIntf;
} catch (Exception ex) {
String msgStr = "Interface type " + intf.fullName() + " not found.";
org.apache.cxf.common.i18n.Message msg =
new org.apache.cxf.common.i18n.Message(msgStr, LOG);
throw new Exception(msg.toString());
}
}
}
return result;
}
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;
}
private IdlType createUnion(Union u, IdlScopeBase scope,
String local) throws Exception {
boolean undefinedCircular = false;
IdlType disc = findType(u.getDiscriminator());
IdlUnion union = IdlUnion.create(scope, local, disc);
scope.holdForScope(union);
for (Unionbranch ub : u .getUnionbranch()) {
QName qname = ub.getIdltype();
IdlType bt = findType(qname);
boolean isDefault = false;
if (ub.isSetDefault()) {
isDefault = ub.isDefault();
}
IdlUnionBranch b = IdlUnionBranch.create(union, ub.getName(), bt, isDefault);
for (CaseType cs : ub.getCase()) {
b.addCase(cs.getLabel());
}
// Ensure that this union will not be written until all of its circular members are
// defined, unless the undefined circular members are of sequence type.
if (!undefinedCircular && !(bt instanceof IdlSequence)) {
String mlocal = qname.getLocalPart();
String mname[] = unscopeName(mlocal);
undefinedCircular = null != root.lookup(mname, true);
}
union.addBranch(b);
}
if (undefinedCircular) {
scope.parkHeld();
} else {
scope.promoteHeldToScope();
if (union.isCircular()) {
// resolving this union closed a recursion
scope.flush();
}
}
return union;
}
private IdlType createStruct(Struct s, IdlScopeBase scope,
String local) throws Exception {
boolean undefinedCircular = false;
IdlStruct struct = IdlStruct.create(scope, local);
scope.holdForScope(struct);
for (MemberType m : s.getMember()) {
QName qname = m.getIdltype();
IdlType type = findType(qname);
// Ensure that this struct will not be written until
// all of its circular members are defined, unless
// the undefined circular members are of sequence type.
if (!undefinedCircular && !(type instanceof IdlSequence)) {
String mlocal = qname.getLocalPart();
String mname[] = unscopeName(mlocal);
undefinedCircular = null != root.lookup(mname, true);
}
struct.addToScope(IdlField.create(struct, m.getName(), type));
}
if (undefinedCircular) {
scope.parkHeld();
} else {
scope.promoteHeldToScope();
if (struct.isCircular()) {
// resolving this struct closed a recursion
scope.flush();
}
}
return struct;
}
private IdlType createTypedef(Alias a, IdlScopeBase scope,
String local) throws Exception {
IdlType idlType = null;
IdlType base = findType(a.getBasetype());
idlType = IdlTypedef.create(scope, local, base);
scope.addToScope(idlType);
return idlType;
}
private IdlType createConst(Const c, IdlScopeBase scope,
String local) throws Exception {
IdlType idlType = null;
IdlType base = findType(c.getIdltype());
String value = c.getValue();
idlType = IdlConst.create(scope, local, base, value);
scope.addToScope(idlType);
return idlType;
}
private IdlType createSequence(Sequence s, IdlScopeBase scope,
String local) throws Exception {
IdlType idlType = null;
IdlType base = findType(s.getElemtype());
int bound = (int)s.getBound();
idlType = IdlSequence.create(scope, local, base, bound);
scope.addToScope(idlType);
return idlType;
}
private IdlType createAnonSequence(Anonsequence s, IdlScopeBase scope,
String local) throws Exception {
IdlType idlType = null;
IdlType base = findType(s.getElemtype());
int bound = (int)s.getBound();
idlType = IdlAnonSequence.create(scope, base, bound);
scope.addToScope(idlType);
return idlType;
}
private IdlType createArray(Array s, IdlScopeBase scope, String local)
throws Exception {
IdlType idlType = null;
IdlType base = findType(s.getElemtype());
int bound = (int)s.getBound();
idlType = IdlArray.create(scope, local, base, bound);
scope.addToScope(idlType);
return idlType;
}
private IdlType createAnonArray(Anonarray s, IdlScopeBase scope, String local)
throws Exception {
IdlType idlType = null;
IdlType base = findType(s.getElemtype());
int bound = (int)s.getBound();
idlType = IdlAnonArray.create(scope, base, bound);
scope.addToScope(idlType);
return idlType;
}
private IdlType createFixed(Fixed f, IdlScopeBase scope, String local) {
IdlType idlType = null;
Long digits = f.getDigits();
Long scale = f.getScale();
idlType = IdlFixed.create(scope, local, digits.intValue(),
scale.intValue());
scope.addToScope(idlType);
return idlType;
}
private IdlType createAnonFixed(Anonfixed f, IdlScopeBase scope, String local) {
IdlType idlType = null;
Long digits = f.getDigits();
Long scale = f.getScale();
idlType = IdlAnonFixed.create(scope, digits.intValue(), scale.intValue());
scope.addToScope(idlType);
return idlType;
}
private IdlType createEnum(Enum e, IdlScopeBase scope, String local) {
IdlEnum enum1 = IdlEnum.create(scope, local);
Iterator<Enumerator> it = e.getEnumerator().iterator();
while (it.hasNext()) {
// Enumerators are created in the same scope
// as the enum, according to IDL grammar rules.
String n = it.next().getValue();
IdlEnumerator enumerator = IdlEnumerator.create(scope, n);
scope.addToScope(enumerator);
enum1.addEnumerator(enumerator);
}
scope.addToScope(enum1);
return enum1;
}
private PrintWriter createPrintWriter(String filename) throws Exception {
OutputStream out = factory.createOutputStream(filename);
return new PrintWriter(out);
}
public void setOutputDirectory(String dir) {
// Force directory creation
// before setting output directory
if (dir != null) {
File fileOutputDir = new File(dir);
if (!fileOutputDir.exists()) {
fileOutputDir.mkdir();
}
}
factory = new FileOutputStreamFactory(dir);
}
private Binding findBinding(Definition definition) {
Binding binding = null;
Collection<Binding> bindings = CastUtils.cast(definition.getBindings().values());
if (bindingName != null) {
for (Binding b : bindings) {
binding = b;
if (binding.getQName().getLocalPart().equals(bindingName)) {
return binding;
}
}
} else {
if (bindings.size() >= 1) {
binding = bindings.iterator().next();
}
}
return binding;
}
private String[] unscopeName(String nm) {
StringTokenizer strtok = new StringTokenizer(nm, ".");
String result[] = new String[strtok.countTokens()];
for (int i = 0; strtok.hasMoreTokens(); ++i) {
result[i] = strtok.nextToken();
}
return result;
}
public void setOutputFile(String file) {
outputFile = file;
}
public void setPrintWriter(PrintWriter pw) {
printWriter = pw;
}
public void setWsdlFile(String file) {
wsdlFileName = file;
}
public void setVerboseOn(boolean verbose) {
verboseOn = verbose;
}
public boolean isVerboseOn() {
return verboseOn;
}
public void setBindingName(String bindName) {
bindingName = bindName;
}
public String getBindingName() {
return bindingName;
}
public void setNamespace(String namespaceName) {
namespace = namespaceName;
}
public String getNamespace() {
return namespace;
}
public void setGenerateAllBindings(boolean all) {
generateAllBindings = all;
}
public boolean isGenerateAllBindings() {
return generateAllBindings;
}
}