jp.co.fujitsu.reffi.client.swing.model
クラス WebServiceCore

java.lang.Object
  上位を拡張 jp.co.fujitsu.reffi.client.swing.model.BaseModel
      上位を拡張 jp.co.fujitsu.reffi.client.swing.model.AbstractHTTPCore
          上位を拡張 jp.co.fujitsu.reffi.client.swing.model.WebServiceCore
すべての実装されたインタフェース:
java.util.concurrent.Callable<java.lang.Object>, Model

public class WebServiceCore
extends AbstractHTTPCore

[概 要]

サーバとSOAP通信を行う為の機能モデルクラスです。

[詳 細]

wsimportで生成されたJAX-WS通信スタブを操作してSOAP通信を行います。

必須設定メソッド

通信スタブ内にハードコーディングされているWSDL以外のWSDLを取得する場合、 別途以下のパラメータが必要です。
        // 送信先サービスを動的決定
        String wsdlLocation = "http://foo.bar/DummyReceptor/filerecieve?wsdl":
        QName serviceName = new QName("http://recept.ws.dummy/", "FileRecieveService");
        ((WebServiceCore)next).setRequestTarget(wsdlLocation, serviceName);
 
上記セッターを実行することで、Serviceクラスのインスタンス化時、実行するコンストラクタ を切り替えます。
QNameに設定するパラメータは生成されたServiceクラスのソースコードを参照してください。

[備 考]

BASIC認証、DIGEST認証、Cookieに関する設定はAbstractHTTPCoreを参照して下さい。 使用例)
ローカルファイルをMTOM通信でサーバにアップロードする
 package demo.webservice.action;

        import java.util.List;
        
        import javax.activation.DataHandler;
        import javax.activation.FileDataSource;
        
        import jp.co.fujitsu.reffi.client.swing.action.BaseAction;
        import jp.co.fujitsu.reffi.client.swing.event.ModelProcessEvent;
        import jp.co.fujitsu.reffi.client.swing.model.Model;
        import jp.co.fujitsu.reffi.client.swing.model.WebServiceCore;
        import jp.co.fujitsu.reffi.client.swing.util.MessageDialogUtil;
        import demo.server.ws.mtom.FileRecieve;
        import demo.server.ws.mtom.FileRecieveService;
        
        public class MtomSendAction extends BaseAction {
        
                @Override
                protected void reserveModels(List> models) {
                        models.add(WebServiceCore.class);
                }
        
                @Override
                public boolean nextModel(int index, ModelProcessEvent prev, Model next) throws Exception {
                        if(index == 0) {
                                ((WebServiceCore)next).setAsync(true);
                                ((WebServiceCore)next).setServiceClass(FileRecieveService.class);
                                ((WebServiceCore)next).setProxyClass(FileRecieve.class);
                                ((WebServiceCore)next).setMethodName("sendBinary");
        
                                DataHandler uploadData = new DataHandler(new FileDataSource("D:\\bigSizeFile.zip"));
                                ((WebServiceCore)next).addParameter(uploadData);
                        }
                        
                        return true;
                }
        
                @Override
                public void successForward(int index, Model model, Object result)       throws Exception {
                        showMessageDialog("ファイルアップロードが完了しました。");
                }
        
                @Override
                public Exception failureForward(int index, Model model, Exception e) {
                        showMessageDialog("ファイルアップロードが失敗しました", "", MessageDialogUtil.ERROR_MESSAGE);
                        return super.failureForward(index, model, e);
                }
        }
 
使用例)
SOAPヘッダにUsernameToken情報を入れる

SOAPリクエストハンドラを作成

        package demo.communication.action;
        
        import java.text.SimpleDateFormat;
        import java.util.Calendar;
        import java.util.Date;
        import java.util.Locale;
        import java.util.Set;
        
        import javax.xml.namespace.QName;
        import javax.xml.soap.SOAPElement;
        import javax.xml.soap.SOAPEnvelope;
        import javax.xml.soap.SOAPHeader;
        import javax.xml.ws.handler.MessageContext;
        import javax.xml.ws.handler.soap.SOAPHandler;
        import javax.xml.ws.handler.soap.SOAPMessageContext;
        
        public class UsernameTokenHandler implements SOAPHandler {
        
                @Override
                public boolean handleMessage(SOAPMessageContext context) {
                        Boolean outboundProperty = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
        
                if (outboundProperty.booleanValue()) {
                        try {
                                // SOAP情報
                        SOAPEnvelope envelope = context.getMessage().getSOAPPart().getEnvelope();
                        SOAPHeader header = envelope.getHeader();
                        
                        if (header == null){
                                header = envelope.addHeader();
                        }
        
                        // セキュリティ
                        SOAPElement security =
                            header.addChildElement("Security", "wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
                        
                        // セキュリティ(タイムスタンプ)
                        Calendar cal = Calendar.getInstance(Locale.ENGLISH);
                        cal.add(Calendar.HOUR, -9);
                        Date createdDate = cal.getTime();
                        cal.add(Calendar.MINUTE, 5);
                        Date expiresDate = cal.getTime();
                        
                        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.'S'Z'", Locale.ENGLISH);
                        
                        SOAPElement timestamp =
                                security.addChildElement("Timestamp", "wsu", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
                        
                        SOAPElement created =
                                timestamp.addChildElement("Created", "wsu");
        
                        created.addTextNode(sdf1.format(createdDate));
                        SOAPElement expires =
                                timestamp.addChildElement("Expires", "wsu");
                        expires.addTextNode(sdf1.format(expiresDate));
                        
                        // セキュリティ(UsernameToken)
                        SOAPElement usernameToken =
                                security.addChildElement("UsernameToken", "wsse");
                        
                        usernameToken.addAttribute(new QName("xmlns:wsu"), "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
        
                        SOAPElement username =
                                usernameToken.addChildElement("Username", "wsse");
                        username.addTextNode("alice");
        
                        SOAPElement password =
                                usernameToken.addChildElement("Password", "wsse");
                        password.setAttribute("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
                        password.addTextNode("bobPW");
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                        return true;
                }
        
                @Override
                public Set getHeaders() {
                        return null;
                }
        
                @Override
                public boolean handleFault(SOAPMessageContext context) {
                        return true;
                }
        
                @Override
                public void close(MessageContext context) {
                }
        } 
 
アクション
        @Override
        public boolean nextModel(int index, ModelProcessEvent prev, Model next) throws Exception {
                if(index == 0) {
                        boolean soapAsync = (Boolean)getComponentValue("communicationFrame.jrbSoapAsync");
                        if(soapAsync) {
                                ((WebServiceCore)next).setAsync(true);
                        }
                        
                        ((WebServiceCore)next).setServiceClass(HeavyProcessService.class);
                        ((WebServiceCore)next).setProxyClass(HeavyProcess.class);
                        ((WebServiceCore)next).setMethodName("heavyProcess");
                        ((WebServiceCore)next).addParameter(5000L);
                        ((WebServiceCore)next).setAuthentication("user", "pass".toCharArray());

                        // UsernameToken情報をヘッダに挿入するハンドラを追加
                        ((WebServiceCore)next).addHandlerChain(new UsernameTokenHandler());
                }
                
                return true;
        }
 

[環 境] JDK 6.0 Update 11

Copyright (c) 2008-2009 FUJITSU Japan All rights reserved.

作成者:
Project Reffi

コンストラクタの概要
WebServiceCore()
          [概 要] デフォルトコンストラクタです。
 
メソッドの概要
 void addHandlerChain(javax.xml.ws.handler.Handler<javax.xml.ws.handler.soap.SOAPMessageContext> handler)
          [概 要] SOAPハンドラのリストにSOAPハンドラを追加します。
 void addParameter(boolean parameter)
          [概 要] Webサービスメソッドの引数指定を追加します。
 void addParameter(char parameter)
          [概 要] Webサービスメソッドの引数指定を追加します。
 void addParameter(double parameter)
          [概 要] Webサービスメソッドの引数指定を追加します。
 void addParameter(float parameter)
          [概 要] Webサービスメソッドの引数指定を追加します。
 void addParameter(int parameter)
          [概 要] Webサービスメソッドの引数指定を追加します。
 void addParameter(long parameter)
          [概 要] Webサービスメソッドの引数指定を追加します。
 void addParameter(java.lang.Object parameter)
          [概 要] Webサービスメソッドの引数指定を追加します。
 void addParameter(short parameter)
          [概 要] Webサービスメソッドの引数指定を追加します。
 java.util.List<javax.xml.ws.handler.Handler> getHandlerChain()
          [概 要] SOAPハンドラのリストを取得します。
 java.lang.String getMethodName()
          [概 要] 呼び出すWebサービスメソッド名を返却します。
 TypeMaintainList getParameters()
          [概 要] Webサービスメソッドの引数を返却します。
 java.lang.Class getPortClass()
          [概 要] JAX-WS 通信スタブのPortクラスを返却します。
 java.lang.Class<? extends javax.xml.ws.Service> getServiceClass()
          [概 要] JAX-WS 通信スタブのServiceクラスを返却します。
protected  void mainproc()
          [概 要] 設定された通信スタブを使用してサーバとSOAP通信を行います。
protected  void postproc()
          モデル処理成功イベント、モデル処理終了イベントを発行します。
 void setHandlerChain(java.util.List<javax.xml.ws.handler.Handler> handlerChain)
          [概 要] SOAPハンドラのリストを設定します。
 void setMethodName(java.lang.String methodName)
          [概 要] 呼び出すWebサービスメソッド名を設定します。
 void setParameters(TypeMaintainList parameters)
          [概 要] Webサービスメソッドの引数を返却します。
 void setPortClass(java.lang.Class portClass)
          [概 要] JAX-WS 通信スタブのPortクラスを設定します。
 void setRequestTarget(java.lang.String wsdlDocumentLocation, javax.xml.namespace.QName serviceName)
          [概 要] 取得するWSDLを動的に変更します。
 void setServiceClass(java.lang.Class<? extends javax.xml.ws.Service> serviceClass)
          [概 要] JAX-WS 通信スタブのServiceクラスを設定します。
 
クラス jp.co.fujitsu.reffi.client.swing.model.AbstractHTTPCore から継承されたメソッド
createCookieString, getAuthPassword, getAuthUser, isSendCookie, removeAuthentication, setAuthentication, setSendCookie
 
クラス jp.co.fujitsu.reffi.client.swing.model.BaseModel から継承されたメソッド
addModelProcessListener, call, done, finalproc, fireModelFailure, fireModelFinished, fireModelSuccess, getController, getExecuteIndex, getListenerList, getParameterMapping, getResult, getSuccessCount, incrementSuccessCount, init, isAsync, isSkip, preproc, removeModelProcessListener, run, setAsync, setController, setExecuteIndex, setListenerList, setParameterMapping, setResult, setSkip, trap
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

WebServiceCore

public WebServiceCore()
               throws java.lang.Exception

[概 要]

デフォルトコンストラクタです。

[詳 細]

Webサービスメソッドパラメータリストインスタンスの初期化、 Handlerチェインリストの初期化を行います。

[備 考]

例外:
java.lang.Exception
メソッドの詳細

getServiceClass

public java.lang.Class<? extends javax.xml.ws.Service> getServiceClass()

[概 要]

JAX-WS 通信スタブのServiceクラスを返却します。

[詳 細]

serviceClassフィールドを返却します。

[備 考]

戻り値:
JAX-WS 通信スタブのServiceクラス

setServiceClass

public void setServiceClass(java.lang.Class<? extends javax.xml.ws.Service> serviceClass)

[概 要]

JAX-WS 通信スタブのServiceクラスを設定します。

[詳 細]

serviceClassフィールドを引数serviceClassで設定します。

[備 考]

パラメータ:
serviceClass - JAX-WS 通信スタブのServiceクラス

getPortClass

public java.lang.Class getPortClass()

[概 要]

JAX-WS 通信スタブのPortクラスを返却します。

[詳 細]

proxyClassフィールドを返却します。

[備 考]

戻り値:
JAX-WS 通信スタブのProxyクラス

setPortClass

public void setPortClass(java.lang.Class portClass)

[概 要]

JAX-WS 通信スタブのPortクラスを設定します。

[詳 細]

proxyClassフィールドを引数proxyClassで設定します。

[備 考]

パラメータ:
portClass - JAX-WS 通信スタブのProxyクラス

getMethodName

public java.lang.String getMethodName()

[概 要]

呼び出すWebサービスメソッド名を返却します。

[詳 細]

methodNameフィールドを返却します。

[備 考]

戻り値:
呼び出すWebサービスメソッド名

setMethodName

public void setMethodName(java.lang.String methodName)

[概 要]

呼び出すWebサービスメソッド名を設定します。

[詳 細]

methodNameフィールドを引数methodNameで設定します。

[備 考]

パラメータ:
methodName - 呼び出すWebサービスメソッド名

getParameters

public TypeMaintainList getParameters()

[概 要]

Webサービスメソッドの引数を返却します。

[詳 細]

parametersフィールドを返却します。

[備 考]

戻り値:
Webサービスメソッドの引数

setParameters

public void setParameters(TypeMaintainList parameters)

[概 要]

Webサービスメソッドの引数を返却します。

[詳 細]

parametersフィールドを返却します。

[備 考]

パラメータ:
parameters - Webサービスメソッドの引数

addParameter

public void addParameter(java.lang.Object parameter)

[概 要]

Webサービスメソッドの引数指定を追加します。

[詳 細]

parametersフィールドに引数parameterを追加します。

[備 考]

パラメータ:
parameter - Webサービスメソッドパラメータ

addParameter

public void addParameter(char parameter)

[概 要]

Webサービスメソッドの引数指定を追加します。

[詳 細]

parametersフィールドに引数parameterを追加します。

[備 考]

パラメータ:
parameter - Webサービスメソッドパラメータ

addParameter

public void addParameter(short parameter)

[概 要]

Webサービスメソッドの引数指定を追加します。

[詳 細]

parametersフィールドに引数parameterを追加します。

[備 考]

パラメータ:
parameter - Webサービスメソッドパラメータ

addParameter

public void addParameter(int parameter)

[概 要]

Webサービスメソッドの引数指定を追加します。

[詳 細]

parametersフィールドに引数parameterを追加します。

[備 考]

パラメータ:
parameter - Webサービスメソッドパラメータ

addParameter

public void addParameter(long parameter)

[概 要]

Webサービスメソッドの引数指定を追加します。

[詳 細]

parametersフィールドに引数parameterを追加します。

[備 考]

パラメータ:
parameter - Webサービスメソッドパラメータ

addParameter

public void addParameter(float parameter)

[概 要]

Webサービスメソッドの引数指定を追加します。

[詳 細]

parametersフィールドに引数parameterを追加します。

[備 考]

パラメータ:
parameter - Webサービスメソッドパラメータ

addParameter

public void addParameter(double parameter)

[概 要]

Webサービスメソッドの引数指定を追加します。

[詳 細]

parametersフィールドに引数parameterを追加します。

[備 考]

パラメータ:
parameter - Webサービスメソッドパラメータ

addParameter

public void addParameter(boolean parameter)

[概 要]

Webサービスメソッドの引数指定を追加します。

[詳 細]

parametersフィールドに引数parameterを追加します。

[備 考]

パラメータ:
parameter - Webサービスメソッドパラメータ

setRequestTarget

public void setRequestTarget(java.lang.String wsdlDocumentLocation,
                             javax.xml.namespace.QName serviceName)
                      throws java.net.MalformedURLException

[概 要]

取得するWSDLを動的に変更します。

[詳 細]

通信スタブに記述されているWSDL以外を使用する場合はこのメソッドで ターゲットWSDLを変更します。
        String wsdlLocation = "http://foo.bar.com/Acceptance/filerecieve?wsdl"
        QName serviceName = new QName("http://com.bar.foo/", "FileRecieveService");
        ((WebServiceCore)next).setRequestTarget(wsdlLocation, serviceName);
 

[備 考]

パラメータ:
wsdlDocumentLocation - WSDLロケーション
serviceName - Service QName
例外:
java.net.MalformedURLException

getHandlerChain

public java.util.List<javax.xml.ws.handler.Handler> getHandlerChain()

[概 要]

SOAPハンドラのリストを取得します。

[詳 細]

handlerChainフィールドを返却します。

[備 考]

戻り値:
SOAPハンドラのリスト

setHandlerChain

public void setHandlerChain(java.util.List<javax.xml.ws.handler.Handler> handlerChain)

[概 要]

SOAPハンドラのリストを設定します。

[詳 細]

handlerChainフィールドに引数handlerChainを設定します。

[備 考]

パラメータ:
handlerChain - SOAPハンドラのリスト

addHandlerChain

public void addHandlerChain(javax.xml.ws.handler.Handler<javax.xml.ws.handler.soap.SOAPMessageContext> handler)

[概 要]

SOAPハンドラのリストにSOAPハンドラを追加します。

[詳 細]

handlerChainフィールドに引数handlerを追加します。

[備 考]

パラメータ:
handler - SOAPハンドラ

mainproc

protected void mainproc()
                 throws java.lang.InstantiationException,
                        java.lang.IllegalAccessException,
                        java.lang.ClassNotFoundException,
                        java.lang.SecurityException,
                        java.lang.NoSuchMethodException,
                        java.lang.IllegalArgumentException,
                        java.lang.reflect.InvocationTargetException

[概 要]

設定された通信スタブを使用してサーバとSOAP通信を行います。

[詳 細]

以下の処理を行います。
  1. Serviceクラスのインスタンス化。この際、setRequestTargetが実行されている 場合は使用するコンストラクタを変更します。
  2. 生成されたServiceオブジェクトにHandlerチェインを追加。
  3. ServiceオブジェクトからPortオブジェクトを生成。
  4. 呼び出すWebサービスメソッドをリフレクション、パラメータ設定。
  5. Webサービスメソッド実行

[備 考]

オーバーライド:
クラス BaseModel 内の mainproc
例外:
java.lang.ClassNotFoundException
java.lang.IllegalAccessException
java.lang.InstantiationException
java.lang.NoSuchMethodException
java.lang.SecurityException
java.lang.reflect.InvocationTargetException
java.lang.IllegalArgumentException

postproc

protected void postproc()
                 throws java.lang.Exception
モデル処理成功イベント、モデル処理終了イベントを発行します。

[詳 細]

fireModelSuccess、fireModelFinishedメソッドをコールします。

[備 考]

オーバーライド:
クラス BaseModel 内の postproc
例外:
java.lang.Exception - オーバーライド先で発生する可能性が有る例外


Copyright © 2008-2010. All Rights Reserved.