JaxRpcTestSuite.java
Upload User: jiancairen
Upload Date: 2007-08-27
Package Size: 26458k
Code Size: 9k
Category:

Java Develop

Development Platform:

Java

  1. /*
  2.  * Copyright 2002-2004 the original author or authors.
  3.  * 
  4.  * Licensed under the Apache License, Version 2.0 (the "License");
  5.  * you may not use this file except in compliance with the License.
  6.  * You may obtain a copy of the License at
  7.  * 
  8.  *      http://www.apache.org/licenses/LICENSE-2.0
  9.  * 
  10.  * Unless required by applicable law or agreed to in writing, software
  11.  * distributed under the License is distributed on an "AS IS" BASIS,
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13.  * See the License for the specific language governing permissions and
  14.  * limitations under the License.
  15.  */ 
  16. package org.springframework.remoting.jaxrpc;
  17. import java.net.MalformedURLException;
  18. import java.net.URL;
  19. import java.rmi.Remote;
  20. import java.rmi.RemoteException;
  21. import java.util.HashMap;
  22. import java.util.Iterator;
  23. import java.util.Map;
  24. import javax.xml.namespace.QName;
  25. import javax.xml.rpc.Service;
  26. import javax.xml.rpc.ServiceException;
  27. import javax.xml.rpc.ServiceFactory;
  28. import javax.xml.rpc.Stub;
  29. import junit.framework.TestCase;
  30. import org.easymock.MockControl;
  31. import org.springframework.remoting.RemoteAccessException;
  32. /**
  33.  * @author Juergen Hoeller
  34.  * @since 18.12.2003
  35.  */
  36. public class JaxRpcTestSuite extends TestCase {
  37. public void testLocalJaxRpcServiceFactoryBeanWithWsdlAndNamespace() throws Exception {
  38. LocalJaxRpcServiceFactoryBean factory = new LocalJaxRpcServiceFactoryBean();
  39. factory.setServiceFactoryClass(MockServiceFactory.class);
  40. factory.setWsdlDocumentUrl(new URL("http://myUrl1"));
  41. factory.setNamespaceUri("myNamespace1");
  42. factory.setServiceName("myService1");
  43. factory.afterPropertiesSet();
  44. assertTrue("Correct singleton value", factory.isSingleton());
  45. assertEquals(MockServiceFactory.service1, factory.getObject());
  46. }
  47. public void testLocalJaxRpcServiceFactoryBeanWithoutWsdlAndNamespace() throws Exception {
  48. LocalJaxRpcServiceFactoryBean factory = new LocalJaxRpcServiceFactoryBean();
  49. factory.setServiceFactoryClass(MockServiceFactory.class);
  50. factory.setServiceName("myService2");
  51. factory.afterPropertiesSet();
  52. assertEquals(MockServiceFactory.service2, factory.getObject());
  53. }
  54. public void testJaxRpcPortProxyFactoryBean() throws Exception {
  55. JaxRpcPortProxyFactoryBean factory = new JaxRpcPortProxyFactoryBean();
  56. factory.setServiceFactoryClass(MockServiceFactory.class);
  57. factory.setWsdlDocumentUrl(new URL("http://myUrl1"));
  58. factory.setNamespaceUri("myNamespace1");
  59. factory.setServiceName("myService1");
  60. factory.setPortName("myPort1");
  61. factory.setUsername("user");
  62. factory.setPassword("pw");
  63. factory.setEndpointAddress("ea");
  64. factory.setMaintainSession(true);
  65. factory.setServiceInterface(IRemoteBean.class);
  66. factory.afterPropertiesSet();
  67. assertTrue("Correct singleton value", factory.isSingleton());
  68. assertTrue(factory.getPortStub() instanceof Stub);
  69. Stub stub = (Stub) factory.getPortStub();
  70. assertEquals("user", stub._getProperty(Stub.USERNAME_PROPERTY));
  71. assertEquals("pw", stub._getProperty(Stub.PASSWORD_PROPERTY));
  72. assertEquals("ea", stub._getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY));
  73. assertTrue(((Boolean) stub._getProperty(Stub.SESSION_MAINTAIN_PROPERTY)).booleanValue());
  74. assertTrue(factory.getObject() instanceof IRemoteBean);
  75. IRemoteBean proxy = (IRemoteBean) factory.getObject();
  76. proxy.setName("myName");
  77. assertEquals("myName", RemoteBean.singleton.name);
  78. MockServiceFactory.service1Control.verify();
  79. }
  80. public void testJaxRpcPortProxyFactoryBeanWithRemoteException() throws Exception {
  81. JaxRpcPortProxyFactoryBean factory = new JaxRpcPortProxyFactoryBean();
  82. factory.setServiceFactoryClass(MockServiceFactory.class);
  83. factory.setWsdlDocumentUrl(new URL("http://myUrl1"));
  84. factory.setNamespaceUri("myNamespace1");
  85. factory.setServiceName("myService1");
  86. factory.setPortName("myPort1");
  87. factory.setServiceInterface(IRemoteBean.class);
  88. factory.afterPropertiesSet();
  89. assertTrue(factory.getPortStub() instanceof Stub);
  90. Stub stub = (Stub) factory.getPortStub();
  91. assertNull(stub._getProperty(Stub.USERNAME_PROPERTY));
  92. assertNull(stub._getProperty(Stub.PASSWORD_PROPERTY));
  93. assertNull(stub._getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY));
  94. assertNull(stub._getProperty(Stub.SESSION_MAINTAIN_PROPERTY));
  95. assertTrue(factory.getObject() instanceof IRemoteBean);
  96. IRemoteBean proxy = (IRemoteBean) factory.getObject();
  97. try {
  98. proxy.setName("exception");
  99. fail("Should have thrown RemoteException");
  100. }
  101. catch (RemoteException ex) {
  102. // expected
  103. }
  104. MockServiceFactory.service1Control.verify();
  105. }
  106. public void testJaxRpcPortProxyFactoryBeanWithPortInterface() throws Exception {
  107. JaxRpcPortProxyFactoryBean factory = new JaxRpcPortProxyFactoryBean();
  108. factory.setServiceFactoryClass(MockServiceFactory.class);
  109. factory.setWsdlDocumentUrl(new URL("http://myUrl1"));
  110. factory.setNamespaceUri("myNamespace1");
  111. factory.setServiceName("myService1");
  112. factory.setPortName("myPort1");
  113. factory.setPortInterface(IRemoteBean.class);
  114. factory.setServiceInterface(IBusinessBean.class);
  115. factory.afterPropertiesSet();
  116. assertTrue(factory.getObject() instanceof IBusinessBean);
  117. assertFalse(factory.getObject() instanceof IRemoteBean);
  118. IBusinessBean proxy = (IBusinessBean) factory.getObject();
  119. proxy.setName("myName");
  120. assertEquals("myName", RemoteBean.singleton.name);
  121. MockServiceFactory.service1Control.verify();
  122. }
  123. public void testJaxRpcPortProxyFactoryBeanWithPortInterfaceAndRemoteException() throws Exception {
  124. JaxRpcPortProxyFactoryBean factory = new JaxRpcPortProxyFactoryBean();
  125. factory.setServiceFactoryClass(MockServiceFactory.class);
  126. factory.setWsdlDocumentUrl(new URL("http://myUrl1"));
  127. factory.setNamespaceUri("myNamespace1");
  128. factory.setServiceName("myService1");
  129. factory.setPortName("myPort1");
  130. factory.setPortInterface(IRemoteBean.class);
  131. factory.setServiceInterface(IBusinessBean.class);
  132. factory.afterPropertiesSet();
  133. assertTrue(factory.getObject() instanceof IBusinessBean);
  134. assertFalse(factory.getObject() instanceof IRemoteBean);
  135. IBusinessBean proxy = (IBusinessBean) factory.getObject();
  136. try {
  137. proxy.setName("exception");
  138. fail("Should have thrown RemoteAccessException");
  139. }
  140. catch (RemoteAccessException ex) {
  141. // expected
  142. }
  143. MockServiceFactory.service1Control.verify();
  144. }
  145. public static class MockServiceFactory extends ServiceFactory {
  146. private static MockControl service1Control;
  147. private static Service service1;
  148. private static MockControl service2Control;
  149. private static Service service2;
  150. public MockServiceFactory() throws ServiceException {
  151. service1Control = MockControl.createControl(Service.class);
  152. service1 = (Service) service1Control.getMock();
  153. service2Control = MockControl.createControl(Service.class);
  154. service2 = (Service) service2Control.getMock();
  155. service1.getPort(new QName("myNamespace1", "myPort1"), IRemoteBean.class);
  156. service1Control.setReturnValue(new RemoteBean());
  157. service1Control.replay();
  158. }
  159. public Service createService(URL url, QName qName) throws ServiceException {
  160. try {
  161. if (!(new URL("http://myUrl1")).equals(url) || !"myNamespace1".equals(qName.getNamespaceURI()) ||
  162. !"myService1".equals(qName.getLocalPart())) {
  163. throw new ServiceException("not supported");
  164. }
  165. }
  166. catch (MalformedURLException ex) {
  167. }
  168. return service1;
  169. }
  170. public Service createService(QName qName) throws ServiceException {
  171. if (!"".equals(qName.getNamespaceURI()) || !"myService2".equals(qName.getLocalPart())) {
  172. throw new ServiceException("not supported");
  173. }
  174. return service2;
  175. }
  176. }
  177. public static interface IBusinessBean {
  178. public void setName(String name);
  179. }
  180. public static interface IRemoteBean extends Remote {
  181. public void setName(String name) throws RemoteException;
  182. }
  183. public static class RemoteBean implements IRemoteBean, Stub {
  184. private static RemoteBean singleton;
  185. private static String name;
  186. private static Map properties;
  187. public RemoteBean() {
  188. singleton = this;
  189. properties = new HashMap();
  190. }
  191. public void setName(String nam) throws RemoteException {
  192. if ("exception".equals(nam)) {
  193. throw new RemoteException();
  194. }
  195. name = nam;
  196. }
  197. public void _setProperty(String key, Object o) {
  198. properties.put(key, o);
  199. }
  200. public Object _getProperty(String key) {
  201. return properties.get(key);
  202. }
  203. public Iterator _getPropertyNames() {
  204. return properties.keySet().iterator();
  205. }
  206. }
  207. }