blob: af650b4c10aaf0c7e0c301d058b550ca5fbbb5fa [file] [log] [blame]
/**
* XBeans implementation.
* Author: David Bau
* Date: Oct 3, 2003
*/
package drtcases;
import junit.framework.Assert;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.apache.xmlbeans.impl.binding.bts.BindingFile;
import org.apache.xmlbeans.impl.binding.bts.BindingLoader;
import org.apache.xmlbeans.impl.binding.bts.BindingType;
import org.apache.xmlbeans.impl.binding.bts.BuiltinBindingLoader;
import org.apache.xmlbeans.impl.binding.bts.ByNameBean;
import org.apache.xmlbeans.impl.binding.bts.JavaName;
import org.apache.xmlbeans.impl.binding.bts.PathBindingLoader;
import org.apache.xmlbeans.impl.binding.bts.QNameProperty;
import org.apache.xmlbeans.impl.binding.bts.SimpleBindingType;
import org.apache.xmlbeans.impl.binding.bts.XmlName;
import org.apache.xmlbeans.impl.binding.bts.BindingTypeName;
import org.apache.xmlbeans.impl.binding.compile.JAXRPCSchemaBinder;
import org.apache.xmlbeans.impl.binding.compile.SchemaToJavaResult;
import org.apache.xmlbeans.impl.binding.compile.JavaCodeGenerator;
import org.apache.xmlbeans.x2003.x09.bindingConfig.BindingConfigDocument;
import org.apache.xmlbeans.XmlBeans;
import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.SchemaTypeSystem;
import org.w3.x2001.xmlSchema.SchemaDocument;
import javax.xml.namespace.QName;
import java.io.File;
import java.util.Iterator;
public class BindingTests extends TestCase
{
public BindingTests(String name) { super(name); }
public static Test suite() { return new TestSuite(BindingTests.class); }
public static boolean verbose = false;
public void testJAXRPCBinding() throws Exception
{
File typesonlyfile = TestEnv.xbeanCase("schema/typesonly/typesonly.xsd");
SchemaTypeSystem sts = XmlBeans.compileXsd(new XmlObject[] { SchemaDocument.Factory.parse(typesonlyfile) }, XmlBeans.getBuiltinTypeSystem(), null);
SchemaToJavaResult result = JAXRPCSchemaBinder.bind(sts, BuiltinBindingLoader.getInstance());
if (verbose)
result.getBindingFileGenerator().printBindingFile(System.out);
JavaCodeGenerator javacode = result.getJavaCodeGenerator();
for (Iterator i = javacode.getToplevelClasses().iterator(); i.hasNext(); )
{
String javaclass = (String)i.next();
if (verbose)
{
System.out.println("=======================");
System.out.println(javaclass);
System.out.println("=======================");
javacode.printSourceCode(javaclass, System.out);
System.out.flush();
}
}
}
public void testBindingFile() throws Exception
{
BindingFile bf = new BindingFile();
BindingLoader builtins = BuiltinBindingLoader.getInstance();
// some complex types
ByNameBean bnb = new ByNameBean(BindingTypeName.forPair(JavaName.forString("com.mytest.MyClass"), XmlName.forString("t=my-type@http://www.mytest.com/")));
bf.addBindingType(bnb, true, true);
ByNameBean bnb2 = new ByNameBean(BindingTypeName.forPair(JavaName.forString("com.mytest.YourClass"), XmlName.forString("t=your-type@http://www.mytest.com/")));
bf.addBindingType(bnb2, true, true);
// a custom simple type
SimpleBindingType sbt = new SimpleBindingType(BindingTypeName.forPair(JavaName.forString("java.lang.String"), XmlName.forString("t=custom-string@http://www.mytest.com/")));
bf.addBindingType(sbt, false, true); // note not from-java-default for String
// bnb
QNameProperty prop = new QNameProperty();
prop.setQName(new QName("http://www.mytest.com/", "myelt"));
prop.setSetterName("setMyelt");
prop.setGetterName("getMyelt");
prop.setBindingType(bnb2);
bnb.addProperty(prop);
prop = new QNameProperty();
prop.setQName(new QName("http://www.mytest.com/", "myelt2"));
prop.setSetterName("setMyelt2");
prop.setGetterName("getMyelt2");
prop.setBindingType(bnb);
bnb.addProperty(prop);
prop = new QNameProperty();
prop.setQName(new QName("http://www.mytest.com/", "myatt"));
prop.setSetterName("setMyatt");
prop.setGetterName("getMyatt");
prop.setBindingType(sbt);
bnb.addProperty(prop);
// now bnb2
prop = new QNameProperty();
prop.setQName(new QName("http://www.mytest.com/", "yourelt"));
prop.setSetterName("setYourelt");
prop.setGetterName("getYourelt");
prop.setBindingType(bnb2);
bnb2.addProperty(prop);
prop = new QNameProperty();
prop.setQName(new QName("http://www.mytest.com/", "yourelt2"));
prop.setSetterName("setYourelt2");
prop.setGetterName("getYourelt2");
prop.setBindingType(bnb);
bnb2.addProperty(prop);
// sbt
sbt.setAsIfXmlType(XmlName.forString("t=string@http://www.w3.org/2001/XMLSchema"));
// now serialize
BindingConfigDocument doc = bf.write();
if (verbose)
System.out.println(doc.toString());
// now load
BindingFile bfc = BindingFile.forDoc(doc);
BindingLoader lc = PathBindingLoader.forPath(new BindingLoader[] {builtins, bfc});
ByNameBean bnbc = (ByNameBean)bfc.getBindingType(BindingTypeName.forPair(JavaName.forString("com.mytest.MyClass"), XmlName.forString("t=my-type@http://www.mytest.com/")));
ByNameBean bnb2c = (ByNameBean)bfc.getBindingType(BindingTypeName.forPair(JavaName.forString("com.mytest.YourClass"), XmlName.forString("t=your-type@http://www.mytest.com/")));
SimpleBindingType sbtc = (SimpleBindingType)bfc.getBindingType(BindingTypeName.forPair(JavaName.forString("java.lang.String"), XmlName.forString("t=custom-string@http://www.mytest.com/")));
// check loading xsd:float
{
QName qn = new QName("http://www.w3.org/2001/XMLSchema", "float");
XmlName xn = XmlName.forTypeNamed(qn);
XmlName xns = XmlName.forString("t=float@http://www.w3.org/2001/XMLSchema");
Assert.assertEquals(xn, xns);
Assert.assertEquals(xn.hashCode(), xns.hashCode());
BindingType btype = lc.getBindingType(lc.lookupPojoFor(xn));
Assert.assertNotNull(btype);
}
// check loading xsd:string
{
QName qn = new QName("http://www.w3.org/2001/XMLSchema", "string");
XmlName xn = XmlName.forTypeNamed(qn);
XmlName xns = XmlName.forString("t=string@http://www.w3.org/2001/XMLSchema");
Assert.assertEquals(xn, xns);
Assert.assertEquals(xn.hashCode(), xns.hashCode());
BindingType btype = lc.getBindingType(lc.lookupPojoFor(xn));
Assert.assertNotNull(btype);
}
// check bnb
prop = bnbc.getPropertyForElement(new QName("http://www.mytest.com/", "myelt"));
Assert.assertEquals("setMyelt", prop.getSetterName());
Assert.assertEquals("getMyelt", prop.getGetterName());
Assert.assertEquals(bnb2c, lc.getBindingType(prop.getTypeName()));
prop = bnbc.getPropertyForElement(new QName("http://www.mytest.com/", "myelt2"));
Assert.assertEquals("setMyelt2", prop.getSetterName());
Assert.assertEquals("getMyelt2", prop.getGetterName());
Assert.assertEquals(bnbc, lc.getBindingType(prop.getTypeName()));
prop = bnbc.getPropertyForElement(new QName("http://www.mytest.com/", "myatt"));
Assert.assertEquals("setMyatt", prop.getSetterName());
Assert.assertEquals("getMyatt", prop.getGetterName());
Assert.assertEquals(sbtc, lc.getBindingType(prop.getTypeName()));
// check bnb2
prop = bnb2c.getPropertyForElement(new QName("http://www.mytest.com/", "yourelt"));
Assert.assertEquals("setYourelt", prop.getSetterName());
Assert.assertEquals("getYourelt", prop.getGetterName());
Assert.assertEquals(bnb2c, lc.getBindingType(prop.getTypeName()));
prop = bnb2c.getPropertyForElement(new QName("http://www.mytest.com/", "yourelt2"));
Assert.assertEquals("setYourelt2", prop.getSetterName());
Assert.assertEquals("getYourelt2", prop.getGetterName());
Assert.assertEquals(bnbc, lc.getBindingType(prop.getTypeName()));
// check sbtc
Assert.assertEquals(XmlName.forString("t=string@http://www.w3.org/2001/XMLSchema"), sbtc.getAsIfXmlType());
}
}