远方蔚蓝
一刹那情真,相逢不如不见

文章数量 126

访问次数 199887

运行天数 1437

最近活跃 2024-10-04 23:36:48

进入后台管理系统

搭建一个简单的webservice服务器的例子


  • 请求WebService服务的客户端
package test.webservice.domain;
import java.net.URL;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class Client {
    public static void main(String[] args) {
    
        try {
            String endpoint = "http://localhost:8989/WS_Server/Webservice?wsdl";
            Service service = new Service();
            Call call = (Call) service.createCall();
            call.setTargetEndpointAddress(new URL(endpoint));
            call.setOperationName(new QName("http://domain.webservice.test/", "hellowork"));// 设置namespace
            // 这里的paramName默认使用arg0传参,否则服务器端收到的是null
            // 如果paramName要指定参数名时,服务器端接口需要使用注解@WebParam(name="name")
            call.addParameter("name", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);// 接口的参数
            call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);// 设置返回类型
            String param = "Test";
            String result = (String) call.invoke(new Object[] { param });
            // 给方法传递参数,并且调用方法
            System.out.println("result is " + result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • 发布WebService
package test.webservice.domain;
import javax.xml.ws.Endpoint;
public class WebServicePublish {
    public static void main(String[] args) {
    	
        String address = "http://localhost:8989/WS_Server/Webservice"; //定义服务访问路径
        // 访问 http://localhost:8989/WS_Server/Webservice?wsdl
        Endpoint.publish(address,new WebServiceImpl());
        System.out.println("服务端发布成功了!");
        
    }
}
  • WebService的接口及实现类
package test.webservice.domain;
import javax.jws.WebMethod;
import javax.jws.WebParam;
@javax.jws.WebService 
public interface WebService {
    @WebMethod
    String hellowork(@WebParam(name="name")String name);
}
package test.webservice.domain;
import javax.jws.WebParam;
@javax.jws.WebService
public class WebServiceImpl implements WebService {
    
    // 这里的paramName客户端默认使用arg0传参,否则服务器端收到的是null
	// 如果客户端想要使用paramName指定参数名传参时,服务器端接口需要使用注解@WebParam(name="name")
    public String hellowork(@WebParam(name = "name") String name) {
        System.out.println("请求成功了param: " + name);
        return name + " Hello world!"; // Response 返回给request
    }
}
  • 另一种发布服务的方式
我们需要在WebService的实现类WebServiceImp中使用注解(@Autowired)注入的方式注入其他业务功能的实现类方法
import javax.xml.ws.Endpoint;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import com.goldpac.vtm.business.gdwebservice.service.imp.WebServiceImp;
import com.goldpac.vtm.business.modules.webservice.service.WebService;
/**
 * WebService的启动配置类
 * @author wst(shi-tao.wen) 202194日 下午3:09:01
 *
 */
// Configuration注解使该类成为配置类并在启动的时候启动
@org.springframework.context.annotation.Configuration
public class WebServicePublish {
	@Autowired
	private WebService webService;
	
	/**
	 * 发布WebService服务
	 * @author wst(shi-tao.wen) 202194日 下午3:09:40
	 * @return
	 */
	// Bean注解可以使Endpoint对象在启动的时候注入并实例
	@org.springframework.context.annotation.Bean
	public Endpoint endpoint() {
		String address = "http://localhost:8989/WS_Server/Webservice"; // 定义服务访问路径
		// 访问 http://localhost:8989/WS_Server/Webservice?wsdl
		Endpoint endpoint = Endpoint.publish(address, webService);
		System.out.println("服务端发布成功了!");
		return endpoint;
	}
	
	/**
	 * Bean注解可以使WebService对象在启动的时候注入并实例
	 * @author wst(shi-tao.wen) 202194日 下午3:28:27
	 * @return
	 */
	@Bean
	public WebService getWebService() {
         return new WebServiceImp();
	}
}