XML tag order

2005-07-24 スレッド表示 FUJIMOTO Jun
藤本ともうします

シリアライザとデシリアライザを自作してみて不明点が
出てきたので質問します

オブジェクトの下位構造を表すXMLタグの順番について
シリアライザで設定した順番がデシリアライザの
DeserializerImplのメソッドsetChildValue(Object, Object)
で受け取る順番と一致するということを仮定しても良いので
しょうか?
実際に作って動かしてみたところ同じ順番になっている
ようですが,これを仮定して良いかどうかで作り方が
変わってしまうので確認したいのです.



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: desreializer

2005-07-21 スレッド表示 FUJIMOTO Jun
今原因がわかりました.

スタブでのシリアライザ登録のとき間違って別の
オブジェクトを指定していたものです.

わからないことだらけなのでWSDDの書き方が間違っているのかと
思い(ちょっとデプロイがまともに動いてないこともあって)
ご迷惑をおかけしました.


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: desreializer

2005-07-21 スレッド表示 FUJIMOTO Jun
前のメールの内容は間違いでした
スタブでシリアライザを登録していなかったため
出たものです

やはり
致命的: 例外発生: / [en]-(Exception:)
java.lang.IllegalArgumentException: object is not an instance of
declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

となります.



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: desreializer

2005-07-21 スレッド表示 FUJIMOTO Jun

>  そこで対処方法ですが、WSDDのlanguageSpecificTypeの指定を
>
>    languageSpecificType="java:hoge.Bar"
>    languageSpecificType="java:hoge.Baz"
>
> といった形に修正して結果を報告お願いできますでしょうか?
> ポイント1は「java:」が追加されていることで、ポイント2は
> クラス「Bar」および「Baz」をパッケージ名を含む名称として
> 記載している点です。上記例では、hogeパッケージということ
> になります。









のようにしてみましたが

Exception in thread "main" java.lang.AssertionError: Error :
java.io.IOException: レジストリ
[EMAIL PROTECTED]
クラスfoo.Processのシリアライザが見つかりませんでした
/ [en]-(No serializer found for class foo.Process in registry
[EMAIL PROTECTED])
at foo.Service.exec(Unknown Source)

となりBeanのプロパティであるBeanがシリアライズできないみたいです.

Barは

package foo;
public class Bar
{
private Baz _baz;

public Baz getBaz(){return _baz;}
public void setBaz(final Baz baz){_baz = baz;}
}

Bazは

package foo;
public class Baz
{
private String _uri;

public String getUri(){return _uri;}
public void setUri(final String uri){_uri = uri;}
}

のようになっています


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: desreializer

2005-07-21 スレッド表示 FUJIMOTO Jun

>  木村です。
>
>  IllegalArgumentExceptionですから、プログラムが想定する
> クラス型以外のインスタンスが引数として渡されているという
> ことを示しています。
>
>  ただ、少し不思議なところもあります。WSDDのbeanMapping
> 定義で、「languageSpecificType="Bar"」および
> 「languageSpecificType="Baz"」
> といった指定がなされていますが、これで問題なくデプロイ
> できているでしょうか?Exceptionが発生してしまってうまく
> デプロイできないような気がするのですが...。
>
>  どのバージョンのAxisを使われているでしょうか?
> また、クラスBarおよびBazは、パッケージに属さないクラス
> ということでしょうか?


Axisのバージョンは1.2.1です.
Bar,Bazは本当はパッケージに属しますがメールに転記
するとき名前を変え,パッケージを取ったのです.

デプロイできるかどうかわからないのですが
(デプロイがどうもうまくいかないのでデプロイせずに直接
server_config.wsddに書き込んでいます)
Tomcatからサービスのwsddを要求してもエラーが出ずに
表示されます.

Barのスタブは作らなくても良いはずと思うのですが
間違っているのでしょうか,あるいはWSDDの書き方が
誤っているのでしょうか



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: desreializer

2005-07-20 スレッド表示 FUJIMOTO Jun
先ほどのにミスがありました

>_call.invoke( new Object[]{project, } );
>  
>
とあるのは
_call.invoke(new Object[]{bar, });
の間違いでした.エラーになるのはこれが原因ではありません.


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: desreializer

2005-07-20 スレッド表示 FUJIMOTO Jun
Toshiyuki Kimura wrote:

> To: 藤本さん
>
>  はじめまして。木村です。
>
>  残念ながら、この問いに対する答えは『無理です』ということに
> なってしまいます...。
>
>  もし、クラスFooがJavaBeanであれば、BeanSerializerを利用する
> ことが可能ですが、想定されている条件はそのようなケースではない
> たいめです。ご本人独自でシリアライザ・デシリアライザを実装して
> カスタムシリアライゼーションを行う必要があると思います。
>
>  具体的にどのような利用方法を検討されているのかは不明ですが
> 「org.apache.axis.encoding.ser.ArraySerializer.java」の実装
> などが、(もしかしたら)参考になるのではないかと思います。
>
>> 初めまして 藤本と申します
>>
>> AXISの勉強をしていて,シリアライザとデシリアライザを自分で
>> 定義してみようと思いましたが以下のような場合についての
>> 簡単なサンプルを提示していただけませんか
>>
>> 1.クラスBarとクラスBazにはシリアライザとデシリアライザが
>> 定義されている.
>> 2.クラスFooはFoo(Bar bar, Baz baz)というpublicなコンストラクタ
>> を持つがインスタンスフィールドにはBarとBazを持たない.
>> 3.Fooはデフォルトコンストラクタを持たない.
>>
>> このような場合FooのデシリアライザをBarとBazのデシリアライザ
>> を利用して定義するには?
>
どうもありがとうございます.

私はまだAXISについてほとんどわかっていないばかりでなく,
MLの利用法もわからず,やっと私のメールがML内で有効になっていること
が今し方わかりました(sendに対してフィルターをかけていたので一つも捕まらず
今までずいぶん寂しいMLだと思いこんでいました.)

デシリアライズの実装についてMapSerializer等のソースを眺めて見たのですが
わからないので取りあえずもっと簡単なところから始めようとして,まずBeanの
プロパティ
がBeanである場合について自分なりに(シリアライザは実装せずに
BeanSerializerを使って)
スタブ等つくってみましたが,以下の例外となります

致命的: 例外発生: / [en]-(Exception:)
java.lang.IllegalArgumentException: object is not an instance of
declaring class

Beanのプロパティが基本的な型のときはうまくいったのですが何が悪いのでしょうか

スタブは

import java.net.MalformedURLException;
import java.rmi.RemoteException;

import org.apache.axis.AxisFault;
import org.apache.axis.client.Call;

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;

import static org.apache.axis.encoding.XMLType.*;

public class Service
{
private static final String _SERVICE_NAME = "FooService";
private static final String _ENDPOINT =
"http://localhost:8080/axis/services/"; + _SERVICE_NAME;
private static final QName _BAR_QNAME =
new QName( "urn:FooService", "Bar" );
private static final QName _BAZ_QNAME =
new QName( "urn:FooService", "Baz" );

private Call _call;

public Service()
{
try
{
_call = new Call(_ENDPOINT);
_call.registerTypeMapping(Bar.class, _BAR_QNAME,
new org.apache.axis.encoding.ser
.BeanSerializerFactory
(Bar.class, _BAR_QNAME),
new org.apache.axis.encoding.ser
.BeanDeserializerFactory
(Bar.class, _BAR_QNAME));
_call.registerTypeMapping(Baz.class, _BAZ_QNAME,
new org.apache.axis.encoding.ser
.BeanSerializerFactory
(Baz.class, _BAZ_QNAME),
new org.apache.axis.encoding.ser
.BeanDeserializerFactory
(Baz.class, _BAZ_QNAME));
}
catch(MalformedURLException e)
{
assert false : "Error:" + e.toString();
}
}

public void exec(final Bar bar)
{
try
{
_call.removeAllParameters();
_call.setOperationName( new QName(_SERVICE_NAME, "exec") );
_call.addParameter("arg1", _BAR_QNAME, ParameterMode.IN );
_call.setReturnType(AXIS_VOID);
_call.invoke( new Object[]{project, } );
}
catch (AxisFault fault)
{
assert false : "Error : " + fault.toString();
}
catch (RemoteException fault)
{
assert false : "Error : " + fault.toString();
}
}
}

WSDDは









でBazはBarのプロパティです(getBaz,setBazがある).








-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



desreializer

2005-07-12 スレッド表示 FUJIMOTO Jun

初めまして 藤本と申します

AXISの勉強をしていて,シリアライザとデシリアライザを自分で
定義してみようと思いましたが以下のような場合についての
簡単なサンプルを提示していただけませんか

1.クラスBarとクラスBazにはシリアライザとデシリアライザが
定義されている.
2.クラスFooはFoo(Bar bar, Baz baz)というpublicなコンストラクタ
を持つがインスタンスフィールドにはBarとBazを持たない.
3.Fooはデフォルトコンストラクタを持たない.

このような場合FooのデシリアライザをBarとBazのデシリアライザ
を利用して定義するには?

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



初めまして-デシリアライザの作 り方?

2005-07-12 スレッド表示 FUJIMOTO Jun

初めまして 藤本と申します

AXISの勉強をしていて,シリアライザとデシリアライザを自分で
定義してみようと思いましたが以下のような場合についての
簡単なサンプルを提示していただけませんか

1.クラスBarとクラスBazにはシリアライザとデシリアライザが
 定義されている.
2.クラスFooはFoo(Bar bar, Baz baz)というpublicなコンストラクタ
を持つがインスタンスフィールドにはBarとBazを持たない.
3.Fooはデフォルトコンストラクタを持たない.

このような場合FooのデシリアライザをBarとBazのデシリアライザ
を利用して定義するには?


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]