Skip to content

Commit

Permalink
update CXF to latest version and add test case for webservice protocol (
Browse files Browse the repository at this point in the history
apache#1564)

* update cxf version and add test cases

* support jdk7

* add profile for dependency in jdk9

* modify profile location

* fix jaxb version

* add dependency for jdk9

* extract dependencies to dependencies bom project
  • Loading branch information
kimmking authored and lovepoem committed May 28, 2018
1 parent 9700cba commit bee28e8
Show file tree
Hide file tree
Showing 7 changed files with 291 additions and 2 deletions.
33 changes: 32 additions & 1 deletion dependencies-bom/pom.xml
Expand Up @@ -84,7 +84,7 @@
<curator_version>2.12.0</curator_version>
<jedis_version>2.9.0</jedis_version>
<xmemcached_version>1.3.6</xmemcached_version>
<cxf_version>3.0.14</cxf_version>
<cxf_version>3.1.15</cxf_version>
<thrift_version>0.8.0</thrift_version>
<hessian_version>4.0.38</hessian_version>
<servlet_version>3.1.0</servlet_version>
Expand All @@ -107,6 +107,9 @@
<logback_version>1.2.2</logback_version>
<commons_lang3_version>3.4</commons_lang3_version>
<embedded_redis_version>0.6</embedded_redis_version>

<jaxb_version>2.2.7</jaxb_version>
<activation_version>1.2.0</activation_version>
</properties>

<dependencyManagement>
Expand Down Expand Up @@ -321,6 +324,34 @@
<artifactId>commons-lang3</artifactId>
<version>${commons_lang3_version}</version>
</dependency>

<!-- for dubbo-rpc-webservice -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>${jaxb_version}</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>${jaxb_version}</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>${jaxb_version}</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>javax.activation-api</artifactId>
<version>${activation_version}</version>
</dependency>
<dependency>
<groupId>com.sun.activation</groupId>
<artifactId>javax.activation</artifactId>
<version>${activation_version}</version>
</dependency>

<!-- Test lib -->
<dependency>
<groupId>org.apache.curator</groupId>
Expand Down
21 changes: 21 additions & 0 deletions dubbo-rpc/dubbo-rpc-webservice/pom.xml
Expand Up @@ -40,6 +40,26 @@
<artifactId>dubbo-remoting-http</artifactId>
<version>${project.parent.version}</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>javax.activation-api</artifactId>
</dependency>
<dependency>
<groupId>com.sun.activation</groupId>
<artifactId>javax.activation</artifactId>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-simple</artifactId>
Expand All @@ -53,4 +73,5 @@
<artifactId>spring-context</artifactId>
</dependency>
</dependencies>

</project>
Expand Up @@ -95,7 +95,12 @@ protected <T> Runnable doExport(T impl, Class<T> 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);
}
}
};
}
Expand Down
@@ -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;

/**
* <code>TestService</code>
*/

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);
}
@@ -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) {
}
}
}
@@ -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;
}
}
@@ -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);
}


}

0 comments on commit bee28e8

Please sign in to comment.