/**
* 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.javascript.types;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.Collection;
import java.util.List;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import org.apache.cxf.Bus;
import org.apache.cxf.databinding.DataBinding;
import org.apache.cxf.databinding.DataReader;
import org.apache.cxf.databinding.DataWriter;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.javascript.BasicNameManager;
import org.apache.cxf.javascript.JavascriptTestUtilities;
import org.apache.cxf.javascript.NameManager;
import org.apache.cxf.javascript.NamespacePrefixAccumulator;
import org.apache.cxf.javascript.fortest.AttributeTestBean;
import org.apache.cxf.javascript.fortest.TestBean1;
import org.apache.cxf.jaxb.JAXBDataBinding;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.service.model.SchemaInfo;
import org.apache.cxf.service.model.ServiceInfo;
import org.apache.cxf.test.AbstractCXFSpringTest;
import org.junit.Test;
import org.springframework.context.support.GenericApplicationContext;
public class AttributeTest extends AbstractCXFSpringTest {
private JavascriptTestUtilities testUtilities;
private XMLInputFactory xmlInputFactory;
private XMLOutputFactory xmlOutputFactory;
private Client client;
private List<ServiceInfo> serviceInfos;
private Collection<SchemaInfo> schemata;
private NameManager nameManager;
private JaxWsProxyFactoryBean clientProxyFactory;
public AttributeTest() throws Exception {
testUtilities = new JavascriptTestUtilities(getClass());
testUtilities.addDefaultNamespaces();
xmlInputFactory = XMLInputFactory.newInstance();
xmlOutputFactory = XMLOutputFactory.newInstance();
}
@Override
protected String[] getConfigLocations() {
return new String[] {"classpath:attributeTestBeans.xml"};
}
@Test
public void testDeserialization() throws Exception {
setupClientAndRhino("attribute-test-proxy-factory");
testUtilities.readResourceIntoRhino("/attributeTests.js");
DataBinding dataBinding = new JAXBDataBinding(AttributeTestBean.class);
assertNotNull(dataBinding);
AttributeTestBean bean = new AttributeTestBean();
bean.element1 = "e1";
bean.element2 = "e2";
bean.attribute1 = "a1";
bean.attribute2 = "a2";
String serialized = serializeObject(dataBinding, bean);
testUtilities.rhinoCallInContext("deserializeAttributeTestBean", serialized);
}
private String serializeObject(DataBinding dataBinding,
AttributeTestBean bean) throws XMLStreamException {
DataWriter<XMLStreamWriter> writer = dataBinding.createWriter(XMLStreamWriter.class);
StringWriter stringWriter = new StringWriter();
XMLStreamWriter xmlStreamWriter = xmlOutputFactory.createXMLStreamWriter(stringWriter);
writer.write(bean, xmlStreamWriter);
xmlStreamWriter.flush();
xmlStreamWriter.close();
return stringWriter.toString();
}
@Test
@org.junit.Ignore
public void testSerialization() throws Exception {
setupClientAndRhino("simple-dlwu-proxy-factory");
testUtilities.readResourceIntoRhino("/serializationTests.js");
DataBinding dataBinding = clientProxyFactory.getServiceFactory().getDataBinding();
assertNotNull(dataBinding);
Object serialized = testUtilities.rhinoCallInContext("serializeTestBean1_1");
assertTrue(serialized instanceof String);
String xml = (String)serialized;
DataReader<XMLStreamReader> reader = dataBinding.createReader(XMLStreamReader.class);
StringReader stringReader = new StringReader(xml);
XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(stringReader);
QName testBeanQName = new QName("uri:org.apache.cxf.javascript.testns", "TestBean1");
Object bean = reader.read(testBeanQName, xmlStreamReader, TestBean1.class);
assertNotNull(bean);
assertTrue(bean instanceof TestBean1);
TestBean1 testBean = (TestBean1)bean;
assertEquals("bean1<stringItem", testBean.stringItem);
assertEquals(64, testBean.intItem);
assertEquals(64000000, testBean.longItem);
assertEquals(101, testBean.optionalIntItem);
assertNotNull(testBean.optionalIntArrayItem);
assertEquals(1, testBean.optionalIntArrayItem.length);
assertEquals(543, testBean.optionalIntArrayItem[0]);
serialized = testUtilities.rhinoCallInContext("serializeTestBean1_2");
assertTrue(serialized instanceof String);
xml = (String)serialized;
reader = dataBinding.createReader(XMLStreamReader.class);
stringReader = new StringReader(xml);
xmlStreamReader = xmlInputFactory.createXMLStreamReader(stringReader);
bean = reader.read(testBeanQName, xmlStreamReader, TestBean1.class);
assertNotNull(bean);
assertTrue(bean instanceof TestBean1);
testBean = (TestBean1)bean;
assertEquals("bean1<stringItem", testBean.stringItem);
assertEquals(64, testBean.intItem);
assertEquals(64000000, testBean.longItem);
assertEquals(0, testBean.optionalIntItem);
assertNotNull(testBean.optionalIntArrayItem);
assertEquals(3, testBean.optionalIntArrayItem.length);
assertEquals(543, testBean.optionalIntArrayItem[0]);
assertEquals(0, testBean.optionalIntArrayItem[1]);
assertEquals(345, testBean.optionalIntArrayItem[2]);
serialized = testUtilities.rhinoCallInContext("serializeTestBean1_3");
assertTrue(serialized instanceof String);
xml = (String)serialized;
reader = dataBinding.createReader(XMLStreamReader.class);
stringReader = new StringReader(xml);
xmlStreamReader = xmlInputFactory.createXMLStreamReader(stringReader);
bean = reader.read(testBeanQName, xmlStreamReader, TestBean1.class);
assertNotNull(bean);
assertTrue(bean instanceof TestBean1);
testBean = (TestBean1)bean;
assertEquals("bean1<stringItem", testBean.stringItem);
assertEquals(64, testBean.intItem);
assertEquals(43, testBean.longItem);
assertEquals(33, testBean.optionalIntItem);
assertNull(testBean.optionalIntArrayItem);
}
private void setupClientAndRhino(String clientProxyFactoryBeanId) throws IOException {
testUtilities.setBus(getBean(Bus.class, "cxf"));
testUtilities.initializeRhino();
testUtilities.readResourceIntoRhino("/org/apache/cxf/javascript/cxf-utils.js");
clientProxyFactory = getBean(JaxWsProxyFactoryBean.class, clientProxyFactoryBeanId);
client = clientProxyFactory.getClientFactoryBean().create();
serviceInfos = client.getEndpoint().getService().getServiceInfos();
// there can only be one.
assertEquals(1, serviceInfos.size());
ServiceInfo serviceInfo = serviceInfos.get(0);
schemata = serviceInfo.getSchemas();
nameManager = BasicNameManager.newNameManager(serviceInfo);
NamespacePrefixAccumulator prefixAccumulator =
new NamespacePrefixAccumulator(serviceInfo.getXmlSchemaCollection());
for (SchemaInfo schema : schemata) {
SchemaJavascriptBuilder builder = new SchemaJavascriptBuilder(serviceInfo
.getXmlSchemaCollection(), prefixAccumulator, nameManager);
String allThatJavascript = builder.generateCodeForSchema(schema.getSchema());
assertNotNull(allThatJavascript);
testUtilities.readStringIntoRhino(allThatJavascript, schema.toString() + ".js");
}
}
@Override
protected void additionalSpringConfiguration(GenericApplicationContext context) throws Exception {
}
}