package test.wsdl.getPort;
import javax.xml.namespace.QName;
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.Stub;
import java.util.Iterator;
// This test makes sure that the getPort method works in various service classes.
public class GetPortTestCase extends junit.framework.TestCase {
private static final QName portAOne = new QName("portAOne");
private static final QName portATwo = new QName("portATwo");
private static final QName portAThree = new QName("portAThree");
private static final QName portBOne = new QName("portBOne");
private static final QName portBTwo = new QName("portBTwo");
private static final QName portBTwoA = new QName("portBTwoA");
private static final QName portCOne = new QName("portCOne");
private static final QName portCTwo = new QName("portCTwo");
private static final QName portCThree = new QName("portCThree");
private static final String ADR_PORTAONE = "http://localhost:8080/axis/services/portAOne";
private static final String ADR_PORTATWO = "http://localhost:8080/axis/services/portATwo";
private static final String ADR_PORTATHREE = "http://localhost:8080/axis/services/portAThree";
public GetPortTestCase(String name) {
super(name);
} // ctor
public void testEmptyService() {
Empty empty = new EmptyLocator();
try {
empty.getPort(null);
fail("empty.getPort(null) should have failed.");
}
catch (ServiceException se) {
assertTrue("Wrong exception! " + se.getLinkedCause(),
se.getLinkedCause() == null);
}
} // testEmptyService
/*
<service name="serviceA">
<documentation>
Service with all ports unique. /-- Test Bug 13407 - embedded comments --/
</documentation>
<port name="portAOne" binding="tns:bindingOne">
<soap:address location="http://localhost:8080/axis/services/portAOne"/>
</port>
<port name="portATwo" binding="tns:bindingTwo">
<soap:address location="http://localhost:8080/axis/services/portATwo"/>
</port>
<port name="portAThree" binding="tns:bindingThree">
<soap:address location="http://localhost:8080/axis/services/portAThree"/>
</port>
</service>
*/
public void testNormalService() {
ServiceA service = new ServiceALocator();
try {
One one = (One) service.getPort(One.class);
Two two = (Two) service.getPort(Two.class);
Three three = (Three) service.getPort(Three.class);
}
catch (Throwable t) {
fail("Should not have gotten an exception: " + t);
}
try {
service.getPort(java.util.Vector.class);
fail("service.getPort(Vector.class) should have failed.");
}
catch (ServiceException se) {
assertTrue("Wrong exception! " + se.getLinkedCause(),
se.getLinkedCause() == null);
}
// Make sure we get the proper ports
try {
Stub one = (Stub) service.getPort(portAOne, One.class);
Stub two = (Stub) service.getPort(portATwo, Two.class);
Stub three = (Stub) service.getPort(portAThree, Three.class);
assertTrue("getPort(portAOne) should be of type One, instead it is " + one.getClass().getName(), one instanceof One);
assertTrue("getPort(portAOne) should have " + ADR_PORTAONE + ", instead it has " + one._getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY),
ADR_PORTAONE.equals(one._getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY)));
assertTrue("getPort(portATwo) should be of type Two, instead it is " + two.getClass().getName(), two instanceof Two);
assertTrue("getPort(portATwo) should have address " + ADR_PORTATWO + ", instead it has " + two._getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY),
ADR_PORTATWO.equals(two._getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY)));
assertTrue("getPort(portAThree) should be of type Three, instead it is " + three.getClass().getName(), three instanceof Three);
assertTrue("getPort(portAThree) should have address " +
ADR_PORTATHREE + ", instead it has " +
three._getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY),
ADR_PORTATHREE.equals(three._getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY)));
}
catch (ServiceException se) {
fail("unexpected failure: " + se);
}
} // testNormalService
/*
<service name="serviceB">
<documentation>
Service with two ports (portBTwo, portBTwoA) that share the same portType via the same binding.
</documentation>
<port name="portBOne" binding="tns:bindingOne">
<soap:address location="http://localhost:8080/axis/services/portOne"/>
</port>
<port name="portBTwo" binding="tns:bindingTwo">
<soap:address location="http://localhost:8080/axis/services/portBTwo"/>
</port>
<port name="portBTwoA" binding="tns:bindingTwo">
<soap:address location="http://localhost:8080/axis/services/portBTwoA"/>
</port>
</service>
*/
public void testDoublePortService1() {
ServiceB service = new ServiceBLocator();
try {
One one = (One) service.getPort(One.class);
Two two = (Two) service.getPort(Two.class);
}
catch (Throwable t) {
fail("Should not have gotten an exception: " + t);
}
try {
service.getPort(Three.class);
fail("service.getPort(Three.class) should have failed.");
}
catch (ServiceException se) {
assertTrue("Wrong exception! " + se.getLinkedCause(),
se.getLinkedCause() == null);
}
// Make sure we get the proper ports
try {
Stub one = (Stub) service.getPort(portBOne, One.class);
Stub two = (Stub) service.getPort(portBTwo, Two.class);
Stub three = (Stub) service.getPort(portBTwoA, Two.class);
assertTrue("getPort(portBOne) should be of type One, instead it is " + one.getClass().getName(), one instanceof One);
assertTrue("getPort(portBOne) should have address http://localhost:8080/axis/services/portBOne,"
+ " instead it has " + one._getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY),
"http://localhost:8080/axis/services/portBOne".equals(one._getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY)));
assertTrue("getPort(portBTwo) should be of type Two, instead it is " + two.getClass().getName(), two instanceof Two);
assertTrue("getPort(portBTwo) should have address"
+ "http://localhost:8080/axis/services/portBTwo,"
+ "instead it has " + two._getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY)
+ ", port is " + two.toString(),
"http://localhost:8080/axis/services/portBTwo".equals(two._getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY)));
assertTrue("getPort(portBTwoA) should be of type Two, instead it is " + three.getClass().getName(), three instanceof Two);
assertTrue("getPort(portBTwoA) should have address "
+ "http://localhost:8080/axis/services/portBTwoA, "
+ "instead it has " + three._getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY),
"http://localhost:8080/axis/services/portBTwoA".equals(three._getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY)));
}
catch (ServiceException se) {
fail("unexpected failure: " + se);
}
} // testDoublePortService1
/*
* <service name="serviceC">
<documentation>
Service with two ports (portCTwo, portCThree) that share the same portType via different bindings.
</documentation>
<port name="portCOne" binding="tns:bindingOne">
<soap:address location="http://localhost:8080/axis/services/portCOne"/>
</port>
<port name="portCTwo" binding="tns:bindingTwo">
<soap:address location="http://localhost:8080/axis/services/portCTwo"/>
</port>
<port name="portCThree" binding="tns:bindingAnotherOne">
<soap:address location="http://localhost:8080/axis/services/portCThree"/>
</port>
</service>
*/
public void testDoublePortService2() {
ServiceC service = new ServiceCLocator();
try {
One one = (One) service.getPort(One.class);
Two two = (Two) service.getPort(Two.class);
}
catch (Throwable t) {
fail("Should not have gotten an exception: " + t);
}
try {
service.getPort(Three.class);
fail("service.getPort(Three.class) should have failed.");
}
catch (ServiceException se) {
assertTrue("Wrong exception! " + se.getLinkedCause(),
se.getLinkedCause() == null);
}
// Make sure we get the proper ports
try {
Stub one = (Stub) service.getPort(portCOne, One.class);
Stub two = (Stub) service.getPort(portCTwo, Two.class);
Stub three = (Stub) service.getPort(portCThree, Three.class);
assertTrue("getPort(portCOne) should be of type One, instead it is " + one.getClass().getName(), one instanceof One);
assertTrue("getPort(portCOne) should have address "
+ "http://localhost:8080/axis/services/portCOne, "
+ "instead it has " + one._getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY),
"http://localhost:8080/axis/services/portCOne".equals(one._getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY)));
assertTrue("getPort(portCTwo) should be of type Two, instead it is " + two.getClass().getName(), two instanceof Two);
assertTrue("getPort(portCTwo) should have address "
+ "http://localhost:8080/axis/services/portCTwo, "
+ "instead it has " + two._getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY),
"http://localhost:8080/axis/services/portCTwo".equals(two._getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY)));
assertTrue("getPort(portCThree) should be of type One, instead it is " + three.getClass().getName(), three instanceof One);
assertTrue("getPort(portCThree) should have address "
+ "http://localhost:8080/axis/services/portCThree,"
+ " instead it has " + three._getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY),
"http://localhost:8080/axis/services/portCThree".equals(three._getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY)));
}
catch (ServiceException se) {
fail("unexpected failure: " + se);
}
} // testDoublePortService2
public void testGetPorts() {
Service service = null;
try {
service = new EmptyLocator();
verifyNumberOfPorts("Empty", service.getPorts(), 0);
}
catch (ServiceException se) {
fail("EmptyLocator.getPorts() should not have failed: " + se);
}
try {
service = new ServiceALocator();
verifyNumberOfPorts("ServiceA", service.getPorts(), 3);
}
catch (ServiceException se) {
fail("ServiceA.getPorts() should not have failed: " + se);
}
try {
service = new ServiceBLocator();
verifyNumberOfPorts("ServiceB", service.getPorts(), 3);
}
catch (ServiceException se) {
fail("ServiceB.getPorts() should not have failed: " + se);
}
try {
service = new ServiceCLocator();
verifyNumberOfPorts("ServiceC", service.getPorts(), 3);
}
catch (ServiceException se) {
fail("ServiceC.getPorts() should not have failed: " + se);
}
} // testGetPorts
private void verifyNumberOfPorts(String service, Iterator i, int shouldHave) {
int count = 0;
for (;i.hasNext();count++,i.next());
assertTrue("Service " + service + " should have " + shouldHave + " ports but instead has " + count, shouldHave == count);
} // verifyNumberOfPorts
} // class VerifyTestCase
|