diff --git a/dependencies-bom/pom.xml b/dependencies-bom/pom.xml
index 94bfa1e86e8..89de3c3ce42 100644
--- a/dependencies-bom/pom.xml
+++ b/dependencies-bom/pom.xml
@@ -84,7 +84,7 @@
2.12.0
2.9.0
1.3.6
- 3.0.14
+ 3.1.15
0.8.0
4.0.38
3.1.0
@@ -107,6 +107,9 @@
1.2.2
3.4
0.6
+
+ 2.2.7
+ 1.2.0
@@ -321,6 +324,34 @@
commons-lang3
${commons_lang3_version}
+
+
+
+ javax.xml.bind
+ jaxb-api
+ ${jaxb_version}
+
+
+ com.sun.xml.bind
+ jaxb-impl
+ ${jaxb_version}
+
+
+ com.sun.xml.bind
+ jaxb-core
+ ${jaxb_version}
+
+
+ javax.activation
+ javax.activation-api
+ ${activation_version}
+
+
+ com.sun.activation
+ javax.activation
+ ${activation_version}
+
+
org.apache.curator
diff --git a/dubbo-rpc/dubbo-rpc-webservice/pom.xml b/dubbo-rpc/dubbo-rpc-webservice/pom.xml
index a2b656de695..cdb5403a4ed 100644
--- a/dubbo-rpc/dubbo-rpc-webservice/pom.xml
+++ b/dubbo-rpc/dubbo-rpc-webservice/pom.xml
@@ -40,6 +40,26 @@
dubbo-remoting-http
${project.parent.version}
+
+ javax.xml.bind
+ jaxb-api
+
+
+ com.sun.xml.bind
+ jaxb-impl
+
+
+ com.sun.xml.bind
+ jaxb-core
+
+
+ javax.activation
+ javax.activation-api
+
+
+ com.sun.activation
+ javax.activation
+
org.apache.cxf
cxf-rt-frontend-simple
@@ -53,4 +73,5 @@
spring-context
+
\ No newline at end of file
diff --git a/dubbo-rpc/dubbo-rpc-webservice/src/main/java/com/alibaba/dubbo/rpc/protocol/webservice/WebServiceProtocol.java b/dubbo-rpc/dubbo-rpc-webservice/src/main/java/com/alibaba/dubbo/rpc/protocol/webservice/WebServiceProtocol.java
index 995f5c5f721..f501a42043a 100644
--- a/dubbo-rpc/dubbo-rpc-webservice/src/main/java/com/alibaba/dubbo/rpc/protocol/webservice/WebServiceProtocol.java
+++ b/dubbo-rpc/dubbo-rpc-webservice/src/main/java/com/alibaba/dubbo/rpc/protocol/webservice/WebServiceProtocol.java
@@ -95,7 +95,12 @@ protected Runnable doExport(T impl, Class type, URL url) throws RpcExcept
return new Runnable() {
@Override
public void run() {
- serverFactoryBean.destroy();
+ if(serverFactoryBean.getServer()!= null) {
+ serverFactoryBean.getServer().destroy();
+ }
+ if(serverFactoryBean.getBus()!=null) {
+ serverFactoryBean.getBus().shutdown(true);
+ }
}
};
}
diff --git a/dubbo-rpc/dubbo-rpc-webservice/src/test/java/com/alibaba/dubbo/rpc/protocol/webservice/DemoService.java b/dubbo-rpc/dubbo-rpc-webservice/src/test/java/com/alibaba/dubbo/rpc/protocol/webservice/DemoService.java
new file mode 100644
index 00000000000..d3c664cb1ca
--- /dev/null
+++ b/dubbo-rpc/dubbo-rpc-webservice/src/test/java/com/alibaba/dubbo/rpc/protocol/webservice/DemoService.java
@@ -0,0 +1,43 @@
+/*
+ * 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 com.alibaba.dubbo.rpc.protocol.webservice;
+
+/**
+ * TestService
+ */
+
+public interface DemoService {
+ void sayHello(String name);
+
+ String echo(String text);
+
+ long timestamp();
+
+ void throwTimeout();
+
+ String getThreadName();
+
+ int getSize(String[] strs);
+
+ int getSize(Object[] os);
+
+ Object invoke(String service, String method) throws Exception;
+
+ int stringLength(String str);
+
+ User create(int age, String name);
+}
\ No newline at end of file
diff --git a/dubbo-rpc/dubbo-rpc-webservice/src/test/java/com/alibaba/dubbo/rpc/protocol/webservice/DemoServiceImpl.java b/dubbo-rpc/dubbo-rpc-webservice/src/test/java/com/alibaba/dubbo/rpc/protocol/webservice/DemoServiceImpl.java
new file mode 100644
index 00000000000..96e02c879f9
--- /dev/null
+++ b/dubbo-rpc/dubbo-rpc-webservice/src/test/java/com/alibaba/dubbo/rpc/protocol/webservice/DemoServiceImpl.java
@@ -0,0 +1,80 @@
+/*
+ * 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 com.alibaba.dubbo.rpc.protocol.webservice;
+
+import com.alibaba.dubbo.rpc.RpcContext;
+
+/**
+ * DemoServiceImpl
+ */
+
+public class DemoServiceImpl implements DemoService {
+ public DemoServiceImpl() {
+ super();
+ }
+
+ public void sayHello(String name) {
+ System.out.println("hello " + name);
+ }
+
+ public String echo(String text) {
+ return text;
+ }
+
+ public long timestamp() {
+ return System.currentTimeMillis();
+ }
+
+ public String getThreadName() {
+ return Thread.currentThread().getName();
+ }
+
+ public int getSize(String[] strs) {
+ if (strs == null)
+ return -1;
+ return strs.length;
+ }
+
+ public int getSize(Object[] os) {
+ if (os == null)
+ return -1;
+ return os.length;
+ }
+
+ public Object invoke(String service, String method) throws Exception {
+ System.out.println("RpcContext.getContext().getRemoteHost()=" + RpcContext.getContext().getRemoteHost());
+ return service + ":" + method;
+ }
+
+ public User create(int age, String name){
+ User user = new User();
+ user.setAge(age);
+ user.setName(name);
+ return user;
+ }
+
+ public int stringLength(String str) {
+ return str.length();
+ }
+
+ public void throwTimeout() {
+ try {
+ Thread.sleep(6000);
+ } catch (InterruptedException e) {
+ }
+ }
+}
\ No newline at end of file
diff --git a/dubbo-rpc/dubbo-rpc-webservice/src/test/java/com/alibaba/dubbo/rpc/protocol/webservice/User.java b/dubbo-rpc/dubbo-rpc-webservice/src/test/java/com/alibaba/dubbo/rpc/protocol/webservice/User.java
new file mode 100644
index 00000000000..866e36b9587
--- /dev/null
+++ b/dubbo-rpc/dubbo-rpc-webservice/src/test/java/com/alibaba/dubbo/rpc/protocol/webservice/User.java
@@ -0,0 +1,38 @@
+/*
+ * 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 com.alibaba.dubbo.rpc.protocol.webservice;
+
+public class User {
+ private int age;
+ private String name;
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
\ No newline at end of file
diff --git a/dubbo-rpc/dubbo-rpc-webservice/src/test/java/com/alibaba/dubbo/rpc/protocol/webservice/WebserviceProtocolTest.java b/dubbo-rpc/dubbo-rpc-webservice/src/test/java/com/alibaba/dubbo/rpc/protocol/webservice/WebserviceProtocolTest.java
new file mode 100644
index 00000000000..98e77385f9b
--- /dev/null
+++ b/dubbo-rpc/dubbo-rpc-webservice/src/test/java/com/alibaba/dubbo/rpc/protocol/webservice/WebserviceProtocolTest.java
@@ -0,0 +1,71 @@
+/*
+ * 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 com.alibaba.dubbo.rpc.protocol.webservice;
+
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.common.extension.ExtensionLoader;
+import com.alibaba.dubbo.rpc.Protocol;
+import com.alibaba.dubbo.rpc.ProxyFactory;
+import com.alibaba.dubbo.rpc.service.EchoService;
+import org.junit.Test;
+
+import static junit.framework.Assert.assertEquals;
+
+/**
+ * @author kimmking
+ */
+
+public class WebserviceProtocolTest {
+ private Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();
+ private ProxyFactory proxy = ExtensionLoader.getExtensionLoader(ProxyFactory.class).getAdaptiveExtension();
+
+ @Test
+ public void testDemoProtocol() throws Exception {
+ DemoService service = new DemoServiceImpl();
+ protocol.export(proxy.getInvoker(service, DemoService.class, URL.valueOf("webservice://127.0.0.1:9019/" + DemoService.class.getName() + "?codec=exchange")));
+ service = proxy.getProxy(protocol.refer(DemoService.class, URL.valueOf("webservice://127.0.0.1:9019/" + DemoService.class.getName() + "?codec=exchange")));
+ assertEquals(service.getSize(new String[]{"", "", ""}), 3);
+ }
+
+ @Test
+ public void testWebserviceProtocol() throws Exception {
+ DemoService service = new DemoServiceImpl();
+ protocol.export(proxy.getInvoker(service, DemoService.class, URL.valueOf("webservice://127.0.0.1:9019/" + DemoService.class.getName())));
+ service = proxy.getProxy(protocol.refer(DemoService.class, URL.valueOf("webservice://127.0.0.1:9019/" + DemoService.class.getName())));
+ assertEquals(service.create(1,"kk").getName(), "kk");
+ assertEquals(service.getSize(null), -1);
+ assertEquals(service.getSize(new String[]{"", "", ""}), 3);
+ Object object = service.invoke("webservice://127.0.0.1:9019/" + DemoService.class.getName() + "", "invoke");
+ System.out.println(object);
+ assertEquals("webservice://127.0.0.1:9019/com.alibaba.dubbo.rpc.protocol.webservice.DemoService:invoke", object);
+
+ StringBuffer buf = new StringBuffer();
+ for (int i = 0; i < 1024 * 32 + 32; i++)
+ buf.append('A');
+ assertEquals(32800,service.stringLength(buf.toString()));
+
+// a method start with $ is illegal in soap
+// // cast to EchoService
+// EchoService echo = proxy.getProxy(protocol.refer(EchoService.class, URL.valueOf("webservice://127.0.0.1:9010/" + DemoService.class.getName() + "?client=netty")));
+// assertEquals(echo.echo(buf.toString()), buf.toString());
+// assertEquals(echo.$echo("test"), "test");
+// assertEquals(echo.$echo("abcdefg"), "abcdefg");
+// assertEquals(echo.$echo(1234), 1234);
+ }
+
+
+}
\ No newline at end of file