/**
* 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.aegis.inheritance;
import java.util.HashSet;
import java.util.Set;
import javax.xml.namespace.QName;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.apache.cxf.aegis.AbstractAegisTest;
import org.apache.cxf.aegis.AegisContext;
import org.apache.cxf.aegis.databinding.AegisDatabinding;
import org.apache.cxf.frontend.ServerFactoryBean;
import org.apache.ws.commons.schema.constants.Constants;
import org.junit.Before;
import org.junit.Test;
public class InheritancePOJOTest extends AbstractAegisTest {
@Before
public void setUp() throws Exception {
super.setUp();
ServerFactoryBean sf = createServiceFactory(InheritanceService.class,
null, "InheritanceService",
new QName("urn:xfire:inheritance",
"InheritanceService"),
null);
AegisContext globalContext = new AegisContext();
globalContext.setWriteXsiTypes(true);
Set<String> l = new HashSet<>();
l.add(Employee.class.getName());
globalContext.setRootClassNames(l);
AegisDatabinding binding = new AegisDatabinding();
binding.setAegisContext(globalContext);
sf.getServiceFactory().setDataBinding(binding);
sf.create();
}
@Test
public void testGenerateWsdl() throws Exception {
Document d = getWSDLDocument("InheritanceService");
String types = "//wsdl:types/xsd:schema/";
// check for Employee as extension
String employeeType = types + "xsd:complexType[@name='Employee']";
assertValid(employeeType, d);
String extension = "/xsd:complexContent/xsd:extension[@base='tns:AbstractUser']";
assertValid(employeeType + extension, d);
assertValid(employeeType + extension + "/xsd:sequence/xsd:element[@name='division']", d);
// Check elements/attributes from abstract type are not in the extended type
assertInvalid(employeeType + extension + "/xsd:sequence/xsd:element[@name='name']", d);
assertInvalid(employeeType + "/xsd:attribute[@name='nickname']", d);
// check for BaseUser as abstract
String baseUserType = types + "xsd:complexType[(@name='AbstractUser') and (@abstract='true')]";
assertValid(baseUserType, d);
assertValid(baseUserType + "/xsd:sequence/xsd:element[@name='name']", d);
assertValid(baseUserType + "/xsd:attribute[@name='nickname']", d);
// assertValid("count(" + baseUserType + "/xsd:sequence/*)=1", d);
}
@Test
public void testLocalReceiveEmployee() throws Exception {
Node response = invoke("InheritanceService", "ReceiveEmployee.xml");
addNamespace("w", "urn:xfire:inheritance");
assertValid("//s:Body/w:receiveUserResponse", response);
}
@Test
public void testLocalGetEmployee() throws Exception {
Node response = invoke("InheritanceService", "GetEmployee.xml");
addNamespace("xsi", Constants.URI_2001_SCHEMA_XSI);
addNamespace("w", "urn:xfire:inheritance");
addNamespace("p", "http://inheritance.aegis.cxf.apache.org");
assertValid("//s:Body/w:getEmployeeResponse/w:return/p:division", response);
assertValid("//s:Body/w:getEmployeeResponse/w:return[@xsi:type]", response);
}
}