blob: cd387de47eae317a798a77ccb1e1695dda4e5653 [file] [log] [blame]
/*
* 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.axis2.description.java2wsdl;
import org.apache.axis2.description.AxisService;
import org.apache.ws.commons.schema.XmlSchema;
import org.w3c.dom.Document;
import javax.management.RuntimeErrorException;
import javax.xml.namespace.QName;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class DefaultSchemaGeneratorTest extends XMLSchemaTest {
protected AxisService axisService;
private DefaultSchemaGenerator generator;
public DefaultSchemaGenerator getGenerator() {
return generator;
}
public void setGenerator(DefaultSchemaGenerator generator) {
this.generator = generator;
}
@Override
protected void setUp() throws Exception {
super.setUp();
axisService = new AxisService();
}
@Override
protected void tearDown() throws Exception {
axisService = null;
generator = null;
super.tearDown();
}
public static class TestWebService {
}
public void testGeneratesExtraClass() throws Exception {
generator = new DefaultSchemaGenerator(getClass().getClassLoader(),
TestWebService.class.getName(), "http://example.org", "ex",
axisService);
ArrayList<String> extraClasses = new ArrayList<String>();
extraClasses.add(ExtraClass.class.getName());
generator.setExtraClasses(extraClasses);
Collection<XmlSchema> schemaColl = generator.generateSchema();
assertEquals(1, schemaColl.size());
XmlSchema schema = schemaColl.iterator().next();
boolean foundExtra = false;
for (QName name : schema.getSchemaTypes().keySet()) {
if (name.getLocalPart().equals("ExtraClass"))
foundExtra = true;
}
assertTrue(foundExtra);
}
public void testGenerateSchema() throws Exception {
AxisService axisService = new AxisService();
generator = new DefaultSchemaGenerator(getClass().getClassLoader(),
TestWebService.class.getName(), "http://example.org", "ex",
axisService);
Collection<XmlSchema> schemas = generator.generateSchema();
for (int i = 0; i < 50; i++) {
System.out.println(schemas.size());
}
assertNotNull(schemas);
}
private void testClass(Class<?> c) throws Exception {
generator = getGenerator(c);
Collection<XmlSchema> schemaColl = generator.generateSchema();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
Iterator<XmlSchema> iterator = schemaColl.iterator();
int i = 0;
for (XmlSchema xmlSchema : schemaColl) {
i++;
byteArrayOutputStream = new ByteArrayOutputStream();
xmlSchema.write(byteArrayOutputStream);
String XML1 = byteArrayOutputStream.toString();
String XML2 = readSchema(c, i);
assertSimilarXML(XML2, XML1);
}
}
private void testClass(Class<?> c, String customSchemaLocation)
throws Exception {
generator = getGenerator(c);
generator.setCustomSchemaLocation(customSchemaLocation);
Collection<XmlSchema> schemaColl = generator.generateSchema();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
int i = 0;
for (XmlSchema xmlSchema : schemaColl) {
i++;
byteArrayOutputStream = new ByteArrayOutputStream();
xmlSchema.write(byteArrayOutputStream);
String XML1 = byteArrayOutputStream.toString();
String XML2 = readSchemaWithCustomSchema(c, i);
assertSimilarXML(XML2, XML1);
}
}
private void testClassWithMapping(Class<?> c, String mappingLocation)
throws Exception {
generator = getGenerator(c);
generator.setMappingFileLocation(mappingLocation);
Collection<XmlSchema> schemaColl = generator.generateSchema();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
int i = 0;
for (XmlSchema xmlSchema : schemaColl) {
i++;
byteArrayOutputStream = new ByteArrayOutputStream();
xmlSchema.write(byteArrayOutputStream);
String XML1 = byteArrayOutputStream.toString();
String XML2 = readSchemaWithMappingSchema(c, i);
XML1 = prepareForMapping(XML1);
assertSimilarXML(XML2, XML1);
}
}
private String prepareForMapping(String XML1) {
XML1 = XML1.replaceAll(XMLSchemaNameSpace, "#temporory_replacement1#");
XML1 = XML1
.replaceAll(
"targetNamespace=\"http://java2wsdl.description.axis2.apache.org/xsd\"",
"#temporory_replacement2#");
XML1 = XML1
.replaceAll(
"xmlns:.*=\"http://java2wsdl.description.axis2.apache.org/xsd\"",
"xmlns:mapping=\"http://java2wsdl.description.axis2.apache.org/xsd\"");
XML1 = XML1
.replaceAll(
"xmlns:.*=\"http://www.abc.com/soaframework/common/types\"",
"xmlns:mapping2=\"http://www.abc.com/soaframework/common/types\"");
XML1 = XML1.replaceAll("#temporory_replacement1#", XMLSchemaNameSpace);
XML1 = XML1
.replaceAll(
"<xs:element name=\"MappingTestResult\" nillable=\"true\" type=\".*:ErrorMessage\"/>",
"<xs:element name=\"MappingTestResult\" nillable=\"true\" type=\"mapping:ErrorMessage\"/>");
XML1 = XML1
.replaceAll(
"<xs:element minOccurs=\"0\" name=\"return\" nillable=\"true\" type=\".*:ErrorMessage\"/>",
"<xs:element minOccurs=\"0\" name=\"return\" nillable=\"true\" type=\"mapping:ErrorMessage\"/>");
XML1 = XML1
.replaceAll("#temporory_replacement2#",
"targetNamespace=\"http://java2wsdl.description.axis2.apache.org/xsd\"");
return XML1;
}
public DefaultSchemaGenerator getGenerator(Class<?> c) throws Exception {
return new DefaultSchemaGenerator(getClass().getClassLoader(),
c.getName(), "http://example.org", "ex", axisService);
}
public String readSchema(Class<?> c, int i) throws Exception {
return readFile("test-resources" + File.separator + "schemas"
+ File.separator + "default_generator" + File.separator
+ c.getSimpleName() + "-" + i + ".xml");
}
public String readSchemaWithCustomSchema(Class<?> c, int i)
throws Exception {
return readFile("test-resources" + File.separator + "schemas"
+ File.separator + "default_generator" + File.separator
+ c.getSimpleName() + "with_custom_schema-" + i + ".xml");
}
public String readSchemaWithMappingSchema(Class<?> c, int i)
throws Exception {
return readFile("test-resources" + File.separator + "schemas"
+ File.separator + "default_generator" + File.separator
+ c.getSimpleName() + "with_custom_mapping-" + i + ".xml");
}
public void testDOMClass(Class<?> c) throws Exception {
generator = getGenerator(c);
Collection<XmlSchema> schemaColl = generator.generateSchema();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
Iterator<XmlSchema> iterator = schemaColl.iterator();
int i = 0;
for (XmlSchema xmlSchema : schemaColl) {
i++;
byteArrayOutputStream = new ByteArrayOutputStream();
xmlSchema.write(byteArrayOutputStream);
String XML1 = byteArrayOutputStream.toString();
XML1 = prepareForDOM(XML1);
String XML2 = readSchema(c, i);
assertSimilarXML(XML2, XML1);
}
}
private String prepareForDOM(String XML1) {
XML1 = XML1.replaceAll(XMLSchemaNameSpace, "#temporory_replacement1#");
XML1 = XML1
.replaceAll(
"targetNamespace=\"http://java2wsdl.description.axis2.apache.org\"",
"#temporory_replacement2#");
XML1 = XML1.replaceAll(
"xmlns:.*=\"http://java2wsdl.description.axis2.apache.org\"",
"xmlns:DOM=\"http://java2wsdl.description.axis2.apache.org\"");
XML1 = XML1.replaceAll("#temporory_replacement1#", XMLSchemaNameSpace);
XML1 = XML1
.replaceAll("#temporory_replacement2#",
"targetNamespace=\"http://java2wsdl.description.axis2.apache.org\"");
return XML1;
}
// to test classes which involves java.util.map
public void testMapClass(Class<?> c) throws Exception {
generator = getGenerator(c);
Collection<XmlSchema> schemaColl = generator.generateSchema();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
Iterator<XmlSchema> iterator = schemaColl.iterator();
int i = 0;
for (XmlSchema xmlSchema : schemaColl) {
i++;
byteArrayOutputStream = new ByteArrayOutputStream();
xmlSchema.write(byteArrayOutputStream);
String XML1 = byteArrayOutputStream.toString();
if (XML1.contains("\"http://ws.apache.org/namespaces/axis2/map\"")) {
XML1 = prepareForMap(XML1);
}
String XML2 = readSchema(c, i);
assertSimilarXML(XML2, XML1);
}
}
public String prepareForMap(String XML1) {
XML1 = XML1.replaceAll(XMLSchemaNameSpace, "#temporory_replacement1#");
XML1 = XML1
.replaceAll(
"targetNamespace=\"http://ws.apache.org/namespaces/axis2/map\"",
"#temporory_replacement2#");
XML1 = XML1.replaceAll(
"xmlns:.*=\"http://ws.apache.org/namespaces/axis2/map\"",
"xmlns:map=\"http://ws.apache.org/namespaces/axis2/map\"");
XML1 = XML1
.replaceAll(
" <xs:element maxOccurs=\"unbounded\" minOccurs=\"0\" name=\"entry\" nillable=\"true\" type=\".*:entry1\"/>",
" <xs:element maxOccurs=\"unbounded\" minOccurs=\"0\" name=\"entry\" nillable=\"true\" type=\"map:entry1\"/>");
XML1 = XML1.replaceAll("#temporory_replacement1#", XMLSchemaNameSpace);
XML1 = XML1
.replaceAll("#temporory_replacement2#",
"targetNamespace=\"http://ws.apache.org/namespaces/axis2/map\"");
XML1 = XML1
.replaceAll(
"<xs:element minOccurs=\"0\" name=\"map\" nillable=\"true\" type=\".*:map1\"/>",
"<xs:element minOccurs=\"0\" name=\"map\" nillable=\"true\" type=\"map:map1\"/>");
XML1 = XML1
.replaceAll(
"<xs:element minOccurs=\"0\" name=\"return\" nillable=\"true\" type=\".*:map1\"/>",
"<xs:element minOccurs=\"0\" name=\"return\" nillable=\"true\" type=\"map:map1\"/>");
return XML1;
}
// to test classes which involves POJO objects
public void testPOJOClass(Class<?> c) throws Exception {
generator = getGenerator(c);
Collection<XmlSchema> schemaColl = generator.generateSchema();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
Iterator<XmlSchema> iterator = schemaColl.iterator();
int i = 0;
for (XmlSchema xmlSchema : schemaColl) {
i++;
// /XmlSchema schema = schemaColl.iterator().next();
byteArrayOutputStream = new ByteArrayOutputStream();
xmlSchema.write(byteArrayOutputStream);
String XML1 = byteArrayOutputStream.toString();
// map has differences when generating schema files
if (XML1.contains("http://java2wsdl.description.axis2.apache.org/xsd")) {
XML1 = prepareForPOJO(XML1);
}
String XML2 = readSchema(c, i);
assertSimilarXML(XML2, XML1);
}
}
public String prepareForPOJO(String XML1) {
XML1 = XML1.replaceAll(XMLSchemaNameSpace, "#temporory_replacement1#");
XML1 = XML1
.replaceAll(
"targetNamespace=\"http://java2wsdl.description.axis2.apache.org/xsd\"",
"#temporory_replacement2#");
XML1 = XML1.replaceAll(
"type=\".*:DefaultSchemaGeneratorTest_SimplePOJO\"",
"type=\"pojo:DefaultSchemaGeneratorTest_SimplePOJO\"");
XML1 = XML1
.replaceAll(
"xmlns:.*=\"http://java2wsdl.description.axis2.apache.org/xsd\"",
"xmlns:pojo=\"http://java2wsdl.description.axis2.apache.org/xsd\"");
XML1 = XML1.replaceAll("#temporory_replacement1#", XMLSchemaNameSpace);
XML1 = XML1
.replaceAll("#temporory_replacement2#",
"targetNamespace=\"http://java2wsdl.description.axis2.apache.org/xsd\"");
return XML1;
}
// to test classes which involves Custom Exceptions
public void testExcClass(Class<?> c) throws Exception {
generator = getGenerator(c);
Collection<XmlSchema> schemaColl = generator.generateSchema();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
Iterator<XmlSchema> iterator = schemaColl.iterator();
int i = 0;
for (XmlSchema xmlSchema : schemaColl) {
i++;
byteArrayOutputStream = new ByteArrayOutputStream();
xmlSchema.write(byteArrayOutputStream);
String XML1 = byteArrayOutputStream.toString();
if (XML1.contains("http://java2wsdl.description.axis2.apache.org/xsd")) {
XML1 = prepareForExc(XML1);
}
String XML2 = readSchema(c, i);
assertSimilarXML(XML2, XML1);
}
}
public String prepareForExc(String XML1) {
XML1 = XML1.replaceAll(XMLSchemaNameSpace, "#temporory_replacement1#");
XML1 = XML1
.replaceAll(
"targetNamespace=\"http://java2wsdl.description.axis2.apache.org/xsd\"",
"#temporory_replacement2#");
XML1 = XML1.replaceAll(
"type=\".*:DefaultSchemaGeneratorTest_CustomException\"",
"type=\"exc:DefaultSchemaGeneratorTest_CustomException\"");
XML1 = XML1
.replaceAll(
"xmlns:.*=\"http://java2wsdl.description.axis2.apache.org/xsd\"",
"xmlns:exc=\"http://java2wsdl.description.axis2.apache.org/xsd\"");
XML1 = XML1.replaceAll("#temporory_replacement1#", XMLSchemaNameSpace);
XML1 = XML1
.replaceAll("#temporory_replacement2#",
"targetNamespace=\"http://java2wsdl.description.axis2.apache.org/xsd\"");
return XML1;
}
// to test classes which involves enums
public void testEnumClass(Class<?> c) throws Exception {
generator = getGenerator(c);
Collection<XmlSchema> schemaColl = generator.generateSchema();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
Iterator<XmlSchema> iterator = schemaColl.iterator();
int i = 0;
for (XmlSchema xmlSchema : schemaColl) {
i++;
// /XmlSchema schema = schemaColl.iterator().next();
byteArrayOutputStream = new ByteArrayOutputStream();
xmlSchema.write(byteArrayOutputStream);
String XML1 = byteArrayOutputStream.toString();
// Enum has differences when generating schema files
if (XML1.contains("\"http://ws.apache.org/namespaces/axis2/enum\"")) {
XML1 = prepareForEnum(XML1);
}
XML1 = prepareForEnum(XML1);
String XML2 = readSchema(c, i);
assertSimilarXML(XML2, XML1);
}
}
public String prepareForEnum(String XML1) {
XML1 = XML1.replaceAll(XMLSchemaNameSpace, "#temporory_replacement1#");
XML1 = XML1
.replaceAll(
"targetNamespace=\"http://ws.apache.org/namespaces/axis2/enum\"",
"#temporory_replacement2#");
XML1 = XML1.replaceAll(
"xmlns:.*=\"http://ws.apache.org/namespaces/axis2/enum\"",
"xmlns:enum=\"http://ws.apache.org/namespaces/axis2/enum\"");
XML1 = XML1.replaceAll("#temporory_replacement1#", XMLSchemaNameSpace);
XML1 = XML1
.replaceAll("#temporory_replacement2#",
"targetNamespace=\"http://ws.apache.org/namespaces/axis2/enum\"");
XML1 = XML1
.replaceAll(
"<xs:element minOccurs=\"0\" name=\"e\" nillable=\"true\" type=\".*:SimpleEnum\"/>",
"<xs:element minOccurs=\"0\" name=\"e\" nillable=\"true\" type=\"enum:SimpleEnum\"/>");
XML1 = XML1
.replaceAll(
"<xs:element minOccurs=\"0\" name=\"return\" nillable=\"true\" type=\".*:SimpleEnum\"/>",
"<xs:element minOccurs=\"0\" name=\"return\" nillable=\"true\" type=\"enum:SimpleEnum\"/>");
return XML1;
}
public String readFile(String fileName) throws Exception {
File file = new File(fileName);
char[] buffer = null;
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
buffer = new char[(int) file.length()];
int i = 0;
int c = bufferedReader.read();
while (c != -1) {
buffer[i++] = (char) c;
c = bufferedReader.read();
}
return new String(buffer);
}
public void testNoParameter() throws Exception {
testClass(NoParameterOrReturnType.class);
}
public void testNoParameterWithDefaultShchema() throws Exception {
testClass(NoParameterOrReturnType.class, CustomSchemaLocation);
}
public void testParametersWithDefaultSchema() throws Exception {
testClass(PrimitivesAsParameters.class, CustomSchemaLocation);
}
public void testWithMappingSchema() throws Exception {
testClassWithMapping(MappingCheck.class, MappingFileLocation);
}
public void testPrimitivesAsParameters() throws Exception {
testClass(PrimitivesAsParameters.class);
}
public void testCollectionsAsParameters() throws Exception {
testClass(ColectionAsParameter.class);
}
public void testPrimitiveArrraysAsParaameters() throws Exception {
testClass(PrimitiveArraysAsParametrs.class);
}
public void testMapAsParameter() throws Exception {
testMapClass(MapAsParameter.class);
}
public void testPojoAsParameter() throws Exception {
testPOJOClass(PojoAsParameter.class);
}
public void TestStringAsReturnType() throws Exception {
testClass(StringAsReturnType.class);
}
public void testCollectionAsReturnType() throws Exception {
testClass(CollectionAsReturnType.class);
}
public void testMapAsReturnType() throws Exception {
testMapClass(MapAsReturnType.class);
}
public void testPojoAsReturnType() throws Exception {
testPOJOClass(POJOAsReturnType.class);
}
public void testIntAsReturnType() throws Exception {
testClass(intAsReturnType.class);
}
public void testDoubleAsReturnType() throws Exception {
testClass(doubleAsReturnType.class);
}
public void testCharAsReturnType() throws Exception {
testClass(charAsReturnType.class);
}
public void testRunTimeException() throws Exception {
testClass(RunTimeExceptionCheck.class);
}
public void testCustomExcepion() throws Exception {
testExcClass(CustomExceptionCheck.class);
}
public void testIntArrayAsReturnType() throws Exception {
testClass(IntArrayAsReturnType.class);
}
public void testDoubleArrayAsReturnType() throws Exception {
testClass(DoubleArrayAsReturnType.class);
}
public void testCharArrayAsReturnType() throws Exception {
testClass(CharArrayAsReturnType.class);
}
public void testEnumAsParameter() throws Exception {
testEnumClass(EnumAsParameter.class);
}
public void testEnumAsReturnTYpe() throws Exception {
testEnumClass(EnumAsReturnType.class);
}
// public void testComplexPOJO() throws Exception{
// testPOJOClass(ComplexPOJO.class); // }
public void testExtendedPOJO() throws Exception {
testClass(ExtendedPOJO.class);
}
public void testAbstractPOJO() throws Exception {
testClass(AbstractPOJO.class);
}
public void testConcretePOJO() throws Exception {
testClass(ConcretePOJO.class);
}
public void testDOMAsParameter() throws Exception {
testDOMClass(DOMasParameter.class);
}
public void testDOMAsReturnType() throws Exception {
testDOMClass(DomAsReturnType.class);
}
public void testListAsParameter() throws Exception {
testClass(ListAsParameter.class);
}
public void testListAsReturnType() throws Exception {
testClass(ListAsReturnType.class);
}
class NoParameterOrReturnType {
public void testNoParamiters() {
}
}
class StringAsParameter {
public void testStringParameter(String s) {
}
}
class PrimitivesAsParameters {
public void testPrimitiveTypes(byte b, short s, int i, long l, float f,
double d, boolean isTrue, char c) {
}
}
class ColectionAsParameter {
public void testCollecttionAsPParameter(List<Object> l) {
}
}
class PrimitiveArraysAsParametrs {
public void testPrimitiveTypes(byte[] b, short[] s, int[] i, long[] l,
float[] f, double[] d, boolean[] isTrue, char[] c) {
}
}
class MapAsParameter {
public void testMapAsParameter(Map<Object, Object> map) {
}
}
class PojoAsParameter {
public void testPojoAsParameter(SimplePOJO o) {
}
}
class StringAsReturnType {
public String testStringReturnType() {
return null;
}
}
class CollectionAsReturnType {
public Collection<Object> TestCollectionReturnType() {
return null;
}
}
class ListAsParameter {
public void testList(List l) {
}
}
class ListAsReturnType {
public List testListAsReturnType() {
return null;
}
}
class MapAsReturnType {
public Map<Object, Object> testMapAsReturnType() {
return null;
}
}
class POJOAsReturnType {
public SimplePOJO testPOJOAsReturnType() {
return null;
}
}
class intAsReturnType {
public int testIntAsResult() {
return -1;
}
}
class doubleAsReturnType {
public double testDoubleAsResult() {
return 1.84984398;
}
}
class charAsReturnType {
public char testCharAsResult() {
return 'c';
}
}
class RunTimeExceptionCheck {
public void testRunTImeException() throws RuntimeException {
throw new RuntimeErrorException(null, "message");
}
}
class CustomExceptionCheck {
public void testCustomException() throws CustomException {
throw new CustomException("message");
}
}
class IntArrayAsReturnType {
public int[] testIntArrayAsReturnType() {
return null;
}
}
class CharArrayAsReturnType {
public char[] testCharArrayAsReturnType() {
return null;
}
}
class DoubleArrayAsReturnType {
public double[] testDoubleArrayAsReturnType() {
return null;
}
}
class EnumAsParameter {
public void testEnumAsParameter(SimpleEnum e) {
}
}
class EnumAsReturnType {
public SimpleEnum testEnumAsReturnType() {
return null;
}
}
class DOMasParameter {
public void testDOM(Document document) {
}
}
class DomAsReturnType {
public Document testDOM() {
return null;
}
}
class MappingCheck {
public DummyClass MappingTest() {
return null;
}
}
final class CustomException extends Exception {
String mistake;
public CustomException() {
super();
mistake = "unknown";
}
public CustomException(String err) {
super(err);
mistake = err; // save message
}
public String getError() {
return mistake;
}
}
class SimplePOJO {
private int i;
private double d;
private String s;
private char c;
private byte b;
private boolean bool;
private long l;
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public double getD() {
return d;
}
public void setD(double d) {
this.d = d;
}
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
public char getC() {
return c;
}
public void setC(char c) {
this.c = c;
}
public byte getB() {
return b;
}
public void setB(byte b) {
this.b = b;
}
public boolean isBool() {
return bool;
}
public void setBool(boolean bool) {
this.bool = bool;
}
public long getL() {
return l;
}
public void setL(long l) {
this.l = l;
}
}
final class ComplexPOJO {
private List list;
private String[] strings;
private Map<Object, Object> map;
private SimplePOJO simplePOJO;
private int[] i;
private double[] d;
private char[] c;
private byte[] b;
private boolean bool;
private long[] l;
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public String[] getStrings() {
return strings;
}
public void setStrings(String[] strings) {
this.strings = strings;
}
public Map<Object, Object> getMap() {
return map;
}
public void setMap(Map<Object, Object> map) {
this.map = map;
}
public SimplePOJO getSimplePOJO() {
return simplePOJO;
}
public void setSimplePOJO(SimplePOJO simplePOJO) {
this.simplePOJO = simplePOJO;
}
public int[] getI() {
return i;
}
public void setI(int[] i) {
this.i = i;
}
public double[] getD() {
return d;
}
public void setD(double[] d) {
this.d = d;
}
public char[] getC() {
return c;
}
public void setC(char[] c) {
this.c = c;
}
public byte[] getB() {
return b;
}
public void setB(byte[] b) {
this.b = b;
}
public boolean isBool() {
return bool;
}
public void setBool(boolean bool) {
this.bool = bool;
}
public long[] getL() {
return l;
}
public void setL(long[] l) {
this.l = l;
}
}
abstract class AbstractPOJO {
private int i;
private double d;
private String s;
private char c;
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public double getD() {
return d;
}
public void setD(double d) {
this.d = d;
}
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
public char getC() {
return c;
}
public void setC(char c) {
this.c = c;
}
}
final class ConcretePOJO extends AbstractPOJO {
private byte b;
private boolean bool;
private long l;
public byte getB() {
return b;
}
public void setB(byte b) {
this.b = b;
}
public boolean isBool() {
return bool;
}
public void setBool(boolean bool) {
this.bool = bool;
}
public long getL() {
return l;
}
public void setL(long l) {
this.l = l;
}
}
final class ExtendedPOJO extends SimplePOJO {
private int j;
private double dd;
private String sss;
private char cc;
private byte bb;
public int getJ() {
return j;
}
public void setJ(int j) {
this.j = j;
}
public double getDd() {
return dd;
}
public void setDd(double dd) {
this.dd = dd;
}
public String getSss() {
return sss;
}
public void setSss(String sss) {
this.sss = sss;
}
public char getCc() {
return cc;
}
public void setCc(char cc) {
this.cc = cc;
}
public byte getBb() {
return bb;
}
public void setBb(byte bb) {
this.bb = bb;
}
}
public enum SimpleEnum {
WHITE, BLACK, RED, YELLOW, BLUE;
}
}