/** * 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.configuration.spring; import java.math.BigDecimal; import java.math.BigInteger; import java.util.Set; import javax.xml.bind.DatatypeConverter; import javax.xml.bind.DatatypeConverterInterface; import javax.xml.bind.annotation.adapters.HexBinaryAdapter; import javax.xml.namespace.QName; import org.apache.cxf.bus.spring.BusApplicationContext; import org.apache.cxf.configuration.Configurable; import org.junit.Assert; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class ConfigurerImplTest extends Assert { static { Class<?> cls; try { try { cls = Class.forName("com.sun.xml.bind.DatatypeConverterImpl"); } catch (ClassNotFoundException e) { cls = Class.forName("com.sun.xml.internal.bind.DatatypeConverterImpl"); } DatatypeConverterInterface convert = (DatatypeConverterInterface)cls.getField("theInstance") .get(null); DatatypeConverter.setDatatypeConverter(convert); } catch (Exception ex) { //ignore; } } @Test public void testConfigureSimpleNoMatchingBean() { SimpleBean sb = new SimpleBean("unknown"); BusApplicationContext ac = new BusApplicationContext("/org/apache/cxf/configuration/spring/test-beans.xml", false); ConfigurerImpl configurer = new ConfigurerImpl(ac); configurer.configureBean(sb); assertEquals("Unexpected value for attribute stringAttr", "hello", sb.getStringAttr()); assertTrue("Unexpected value for attribute booleanAttr", sb.getBooleanAttr()); assertEquals("Unexpected value for attribute integerAttr", BigInteger.ONE, sb.getIntegerAttr()); assertEquals("Unexpected value for attribute intAttr", Integer.valueOf(2), sb.getIntAttr()); assertEquals("Unexpected value for attribute longAttr", Long.valueOf(3L), sb.getLongAttr()); assertEquals("Unexpected value for attribute shortAttr", Short.valueOf((short)4), sb.getShortAttr()); assertEquals("Unexpected value for attribute decimalAttr", new BigDecimal("5"), sb.getDecimalAttr()); assertEquals("Unexpected value for attribute floatAttr", new Float(6F), sb.getFloatAttr()); assertEquals("Unexpected value for attribute doubleAttr", Double.valueOf(7.0D), sb.getDoubleAttr()); assertEquals("Unexpected value for attribute byteAttr", Byte.valueOf((byte)8), sb.getByteAttr()); QName qn = sb.getQnameAttr(); assertEquals("Unexpected value for attribute qnameAttrNoDefault", "schema", qn.getLocalPart()); assertEquals("Unexpected value for attribute qnameAttrNoDefault", "http://www.w3.org/2001/XMLSchema", qn.getNamespaceURI()); byte[] expected = DatatypeConverter.parseBase64Binary("abcd"); byte[] val = sb.getBase64BinaryAttr(); assertEquals("Unexpected value for attribute base64BinaryAttrNoDefault", expected.length, val.length); for (int i = 0; i < expected.length; i++) { assertEquals("Unexpected value for attribute base64BinaryAttrNoDefault", expected[i], val[i]); } expected = new HexBinaryAdapter().unmarshal("aaaa"); val = sb.getHexBinaryAttr(); assertEquals("Unexpected value for attribute hexBinaryAttrNoDefault", expected.length, val.length); for (int i = 0; i < expected.length; i++) { assertEquals("Unexpected value for attribute hexBinaryAttrNoDefault", expected[i], val[i]); } assertEquals("Unexpected value for attribute unsignedIntAttrNoDefault", Long.valueOf(9L), sb.getUnsignedIntAttr()); assertEquals("Unexpected value for attribute unsignedShortAttrNoDefault", Integer.valueOf(10), sb.getUnsignedShortAttr()); assertEquals("Unexpected value for attribute unsignedByteAttrNoDefault", Short.valueOf((short)11), sb.getUnsignedByteAttr()); } @Test public void testConfigureSimple() { // Try to configure the bean with id verifyConfigureSimple("simple"); // Try to configure the bean with an alias name verifyConfigureSimple("simpleValueBean"); } public void verifyConfigureSimple(String beanName) { SimpleBean sb = new SimpleBean(beanName); BusApplicationContext ac = new BusApplicationContext("/org/apache/cxf/configuration/spring/test-beans.xml", false); ConfigurerImpl configurer = new ConfigurerImpl(); configurer.setApplicationContext(ac); configurer.configureBean(sb); assertEquals("Unexpected value for attribute stringAttr", "hallo", sb.getStringAttr()); assertTrue("Unexpected value for attribute booleanAttr", !sb.getBooleanAttr()); assertEquals("Unexpected value for attribute integerAttr", BigInteger.TEN, sb.getIntegerAttr()); assertEquals("Unexpected value for attribute intAttr", Integer.valueOf(12), sb.getIntAttr()); assertEquals("Unexpected value for attribute longAttr", Long.valueOf(13L), sb.getLongAttr()); assertEquals("Unexpected value for attribute shortAttr", Short.valueOf((short)14), sb.getShortAttr()); assertEquals("Unexpected value for attribute decimalAttr", new BigDecimal("15"), sb.getDecimalAttr()); assertEquals("Unexpected value for attribute floatAttr", new Float(16F), sb.getFloatAttr()); assertEquals("Unexpected value for attribute doubleAttr", Double.valueOf(17D), sb.getDoubleAttr()); assertEquals("Unexpected value for attribute byteAttr", Byte.valueOf((byte)18), sb.getByteAttr()); assertEquals("Unexpected value for attribute unsignedIntAttrNoDefault", Long.valueOf(19L), sb.getUnsignedIntAttr()); assertEquals("Unexpected value for attribute unsignedShortAttrNoDefault", Integer.valueOf(20), sb.getUnsignedShortAttr()); assertEquals("Unexpected value for attribute unsignedByteAttrNoDefault", Short.valueOf((short)21), sb.getUnsignedByteAttr()); } @Test public void testConfigureSimpleMatchingStarBeanId() { SimpleBean sb = new SimpleBean("simple2"); BusApplicationContext ac = new BusApplicationContext("/org/apache/cxf/configuration/spring/test-beans.xml", false); ConfigurerImpl configurer = new ConfigurerImpl(); configurer.setApplicationContext(ac); configurer.configureBean(sb); assertTrue("Unexpected value for attribute booleanAttr", !sb.getBooleanAttr()); assertEquals("Unexpected value for attribute integerAttr", BigInteger.TEN, sb.getIntegerAttr()); assertEquals("Unexpected value for attribute stringAttr", "StarHallo", sb.getStringAttr()); } @Test public void testConfigureSimpleMatchingStarBeanIdWithChildInstance() { SimpleBean sb = new ChildBean("simple2"); BusApplicationContext ac = new BusApplicationContext("/org/apache/cxf/configuration/spring/test-beans.xml", false); ConfigurerImpl configurer = new ConfigurerImpl(); configurer.setApplicationContext(ac); configurer.configureBean(sb); assertTrue("Unexpected value for attribute booleanAttr", !sb.getBooleanAttr()); assertEquals("Unexpected value for attribute integerAttr", BigInteger.TEN, sb.getIntegerAttr()); assertEquals("Unexpected value for attribute stringAttr", "StarHallo", sb.getStringAttr()); } @Test public void testGetBeanName() { ConfigurerImpl configurer = new ConfigurerImpl(); Object beanInstance = new Configurable() { public String getBeanName() { return "a"; } }; assertEquals("a", configurer.getBeanName(beanInstance)); final class NamedBean { @SuppressWarnings("unused") public String getBeanName() { return "b"; } } beanInstance = new NamedBean(); assertEquals("b", configurer.getBeanName(beanInstance)); beanInstance = this; assertNull(configurer.getBeanName(beanInstance)); } @Test public void testAddApplicationContext() { ConfigurableApplicationContext context1 = new ClassPathXmlApplicationContext("/org/apache/cxf/configuration/spring/test-beans.xml"); ConfigurerImpl configurer = new ConfigurerImpl(); configurer.setApplicationContext(context1); // Just to simulate the OSGi's uninstall command context1.close(); ConfigurableApplicationContext context2 = new ClassPathXmlApplicationContext("/org/apache/cxf/configuration/spring/test-beans.xml"); configurer.addApplicationContext(context2); Set<ApplicationContext> contexts = configurer.getAppContexts(); assertEquals("The Context's size is wrong", 1, contexts.size()); assertTrue("The conetxts' contains a wrong application context", contexts.contains(context2)); } class SimpleBean implements Configurable { private String beanName; private String stringAttr = "hello"; private Boolean booleanAttr = Boolean.TRUE; private BigInteger integerAttr = BigInteger.ONE; private Integer intAttr = Integer.valueOf(2); private Long longAttr = Long.valueOf(3); private Short shortAttr = Short.valueOf((short)4); private BigDecimal decimalAttr = new BigDecimal("5"); private Float floatAttr = new Float(6F); private Double doubleAttr = Double.valueOf(7D); private Byte byteAttr = Byte.valueOf((byte)8); private QName qnameAttr = new QName("http://www.w3.org/2001/XMLSchema", "schema", "xs"); private byte[] base64BinaryAttr = DatatypeConverter.parseBase64Binary("abcd"); private byte[] hexBinaryAttr = new HexBinaryAdapter().unmarshal("aaaa"); private Long unsignedIntAttr = Long.valueOf(9); private Integer unsignedShortAttr = Integer.valueOf(10); private Short unsignedByteAttr = Short.valueOf((short)11); SimpleBean(String bn) { beanName = bn; } public String getBeanName() { return beanName; } public byte[] getBase64BinaryAttr() { return base64BinaryAttr; } public void setBase64BinaryAttr(byte[] base64BinaryAttr) { this.base64BinaryAttr = base64BinaryAttr; } public Boolean getBooleanAttr() { return booleanAttr; } public void setBooleanAttr(Boolean booleanAttr) { this.booleanAttr = booleanAttr; } public Byte getByteAttr() { return byteAttr; } public void setByteAttr(Byte byteAttr) { this.byteAttr = byteAttr; } public BigDecimal getDecimalAttr() { return decimalAttr; } public void setDecimalAttr(BigDecimal decimalAttr) { this.decimalAttr = decimalAttr; } public Double getDoubleAttr() { return doubleAttr; } public void setDoubleAttr(Double doubleAttr) { this.doubleAttr = doubleAttr; } public Float getFloatAttr() { return floatAttr; } public void setFloatAttr(Float floatAttr) { this.floatAttr = floatAttr; } public byte[] getHexBinaryAttr() { return hexBinaryAttr; } public void setHexBinaryAttr(byte[] hexBinaryAttr) { this.hexBinaryAttr = hexBinaryAttr; } public Integer getIntAttr() { return intAttr; } public void setIntAttr(Integer intAttr) { this.intAttr = intAttr; } public BigInteger getIntegerAttr() { return integerAttr; } public void setIntegerAttr(BigInteger integerAttr) { this.integerAttr = integerAttr; } public Long getLongAttr() { return longAttr; } public void setLongAttr(Long longAttr) { this.longAttr = longAttr; } public QName getQnameAttr() { return qnameAttr; } public void setQnameAttr(QName qnameAttr) { this.qnameAttr = qnameAttr; } public Short getShortAttr() { return shortAttr; } public void setShortAttr(Short shortAttr) { this.shortAttr = shortAttr; } public String getStringAttr() { return stringAttr; } public void setStringAttr(String stringAttr) { this.stringAttr = stringAttr; } public Short getUnsignedByteAttr() { return unsignedByteAttr; } public void setUnsignedByteAttr(Short unsignedByteAttr) { this.unsignedByteAttr = unsignedByteAttr; } public Long getUnsignedIntAttr() { return unsignedIntAttr; } public void setUnsignedIntAttr(Long unsignedIntAttr) { this.unsignedIntAttr = unsignedIntAttr; } public Integer getUnsignedShortAttr() { return unsignedShortAttr; } public void setUnsignedShortAttr(Integer unsignedShortAttr) { this.unsignedShortAttr = unsignedShortAttr; } public void setBeanName(String beanName) { this.beanName = beanName; } } class ChildBean extends SimpleBean { ChildBean(String bn) { super(bn); } } }