WSDL真的好简单,而且确实做到了跨语言,按规范来,代码简洁,调用方便。。

你用PHP创建了WS,要Java调用,我就反着来,给你个Java创建+PHP调用的例子,让你两种语言的创建和调用WS都熟悉下。我这里用Java写了个WS,HelloWorld.java,这里对外提供了一个服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
 
@WebService(targetNamespace = "http://localhost/client")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class HelloWorld {
    @WebMethod
    public String sayHelloWorldFrom(String p1, String p2)
  {
    String result = "Hello, world, from " + p1 + " and " + p2;
    System.out.println(result);
    return result;
  }
}

然后我发布它,写个StartService.java

1
2
3
4
5
6
7
import javax.xml.ws.Endpoint;
 
public class StartService {
    public static void main(String[] args) {
        Endpoint.publish("http://localhost:8080/HelloWorldService", new HelloWorld());
    }
}

是不是很简洁啊,不到20行代码啊。编译这两个类,运行
java StartService
然后访问:http://localhost:8080/HelloWorldService ,就能看到服务了,还能看到WSDL文件,然后PHP访问,

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
header("Content-Type: text/html; charset=GBK");
class sayHelloWorldFromResponse{
    public $return;
}
 
class sayHelloWorldFrom{
public $arg0;
public $arg1;
 
public function __construct($arg0,$arg1) {
    $this->arg0=$arg0;
    $this->arg1=$arg1;
 
}
}
class webS { 
 
    public function __construct() {
        $this->client=new SoapClient("http://localhost:8080/HelloWorldService?wsdl",
        array('classmap' =>array('sayHelloWorldFromResponse'=>'sayHelloWorldFromResponse','sayHelloWorldFrom'=>'sayHelloWorldFrom'),
            'encoding'=>'GBK',
            'location' =>"http://localhost:8080/HelloWorldService?wsdl",'uri'=>"http://localhost/client","trace" => 1,"exception"=>true ));
 
    
 
    public function say($a,$b){
        $ret1=$this->client->sayHelloWorldFrom($a,$b);
        return $ret1;
 
    }
     
}
 
$ws=new webS();
var_dump($ws->say('刘惜君','张韶涵'));
执行下,简单得很、 如果Java调用,更简单,Java 6自带了ws包,如果要实现很复杂的调用,还可以用axis2,CXF等第三方包。反正很简单。留给你学学Java了,哈哈
评论(0)| 引用此答案| 举报 (2014-06-20 22:51)
0
Helloall

引用来自“南湖船老大”的评论

WSDL真的好简单,而且确实做到了跨语言,按规范来,代码简洁,调用方便。。

你用PHP创建了WS,要Java调用,我就反着来,给你个Java创建+PHP调用的例子,让你两种语言的创建和调用WS都熟悉下。我这里用Java写了个WS,HelloWorld.java,这里对外提供了一个服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
 
@WebService(targetNamespace = "http://localhost/client")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class HelloWorld {
    @WebMethod
    public String sayHelloWorldFrom(String p1, String p2)
  {
    String result = "Hello, world, from " + p1 + " and " + p2;
    System.out.println(result);
    return result;
  }
}

然后我发布它,写个StartService.java

1
2
3
4
5
6
7
import javax.xml.ws.Endpoint;
 
public class StartService {
    public static void main(String[] args) {
        Endpoint.publish("http://localhost:8080/HelloWorldService", new HelloWorld());
    }
}

是不是很简洁啊,不到20行代码啊。编译这两个类,运行
java StartService
然后访问:http://localhost:8080/HelloWorldService ,就能看到服务了,还能看到WSDL文件,然后PHP访问,

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
header("Content-Type: text/html; charset=GBK");
class sayHelloWorldFromResponse{
    public $return;
}
 
class sayHelloWorldFrom{
public $arg0;
public $arg1;
 
public function __construct($arg0,$arg1) {
    $this->arg0=$arg0;
    $this->arg1=$arg1;
 
}
}
class webS { 
 
    public function __construct() {
        $this->client=new SoapClient("http://localhost:8080/HelloWorldService?wsdl",
        array('classmap' =>array('sayHelloWorldFromResponse'=>'sayHelloWorldFromResponse','sayHelloWorldFrom'=>'sayHelloWorldFrom'),
            'encoding'=>'GBK',
            'location' =>"http://localhost:8080/HelloWorldService?wsdl",'uri'=>"http://localhost/client","trace" => 1,"exception"=>true ));
 
    
 
    public function say($a,$b){
        $ret1=$this->client->sayHelloWorldFrom($a,$b);
        return $ret1;
 
    }
     
}
 
$ws=new webS();
var_dump($ws->say('刘惜君','张韶涵'));
执行下,简单得很、 如果Java调用,更简单,Java 6自带了ws包,如果要实现很复杂的调用,还可以用axis2,CXF等第三方包。反正很简单。留给你学学Java了,哈哈
好强大啊,大哥你真牛叉,羡慕啊..思路是知道了,但是第二个java好像编译无法通过...
posted on 2016-09-26 10:24  飘渺的悠远  阅读(389)  评论(0)    收藏  举报