トップ 一覧 置換 検索 ヘルプ RSS ログイン

JavaでWebdavにアクセスの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
http://itpro.nikkeibp.co.jp/article/COLUMN/20080801/311972/?ST=develop
http://syo.cocolog-nifty.com/freely/2010/10/javawebdav-8cd5.html

!!手順
!サーバー側
1.呼び出されるクラス(WebService)とメソッド(WebMethod)を作成
2.WSDLに必要なファイルを作成 ※この手順を省くと実行時に自動で作成するみたい
3.WebService のランチャーを作成
!ライブラリ
[Apache Jackrabbit|http://jackrabbit.apache.org/]
[webdavclient4j|http://sourceforge.net/projects/webdavclient4j/]
[Jakarta Slide|http://jakarta.apache.org/slide/]

!クライアント側
1.WSDL から 必要なファイルを作成
2.作成したファイルを利用して、サービスを利用する


!!例(サーバ側)
!1.呼び出されるクラス(WebService)とメソッド(WebMethod)を作成
{{code Java,
package test;

import javax.jws.WebService;
import javax.jws.WebMethod;

@WebService
public class TestService {
  @WebMethod
  public String test001(int i){
    return "引数は " + i + " です。";
  }
}
}}
 javac -d server TestService.java

!2.WSDLに必要なファイルを作成
 wsgen -d server -cp server test.TestService
または、
 wsgen -keep -d server -cp server test.TestService
-keep オプションでソースファイルを残せる


!3.WebService のランチャーを作成
{{code Java,
package test;

import javax.xml.ws.Endpoint;

public class ServiceLuncher {
  public static void main(String[] args){
    Endpoint.publish("http://localhost:8080/test",new TestService());
  }
}
}}
 javac -d server -cp server ServiceLuncher.java
サービスを起動するには
 java -cp server test.ServiceLuncher


!!例(クライアント側)
!1.WSDL から 必要なファイルを作成
サーバのサービスを起動した状態で以下を実行
 wsimport -d client http://localhost:8080/test?wsdl
または、
 wsimport -keep -d client http://localhost:8080/test?wsdl
-keep オプションでソースを残せる

!2.作成したファイルを利用して、サービスを利用する
{{code Java,
import test.TestService;
import test.TestServiceService;

public class TestClient {
  public static void main(String[] args){
    //クラスに Service が付くのでクラス名はちゃんと考えたほうがいい
    TestServiceService service = new TestServiceService();
    TestService port = service.getTestServicePort();
    
    String result = port.test001(10);
    System.out.println(result);
  }
}
}}
 javac -cp client;. TestClient.java
実行は
 java -cp client;. TestClient

!!動的にプロキシを変更する
アノテーションで
{{code Java,
 @WebServiceRef(wsdlLocation = "http://localhost:8080/hoge?wsdl")
 private static TestServiceService service
}}
とするとできるらしいが、うまくいかない。

その場合は、
{{code Java,
TestServiceService service =  new TestServiceService(new URL("http://localhost:8080/hoge?wsdl"),new QName("http://test/", "TestServiceService"));
}}
Java7以降は、
{{code Java,
 TestServiceService service = new TestServiceService(new URL("http://localhost:8080/hoge?wsdl"));
}}
でもOK.。
その後で、
 ((BindingProvider)port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,"http://localhost:8080/test");
でアドレスを変更(たぶん、しなくてもすでに変わっていると思うけど・・・)

{{code Java,
import test.TestService;
import test.TestServiceService;

import javax.xml.namespace.QName;
import javax.xml.ws.WebServiceRef;
import javax.xml.ws.BindingProvider;
import java.net.URL;

public class TestClient {
  
  public static void main(String[] args){
    try {
      TestServiceService service =  new TestServiceService(new URL("http://localhost:8080/test?wsdl"),new QName("http://test/", "TestServiceService"));
      // TestServiceService service = new TestServiceService(new URL("http://localhost:8080/test?wsdl"));
      
      TestService port = service.getTestServicePort();
      ((BindingProvider)port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,"http://localhost:8080/test");
      System.out.println(((BindingProvider)port).getRequestContext().get("javax.xml.ws.service.endpoint.address"));
      
      String result = port.test001(100);
      
      System.out.println(result);
    } catch (Exception e){
      e.printStackTrace();
    }
    
  }
}
}}
今のところ、こんな感じらしい。

{{category2 プログラミング言語,Java}}