To: 藤本さん

 木村です。

 IllegalArgumentExceptionですから、プログラムが想定する
クラス型以外のインスタンスが引数として渡されているという
ことを示しています。

 ただ、少し不思議なところもあります。WSDDのbeanMapping
定義で、「languageSpecificType="Bar"」および
    「languageSpecificType="Baz"」
といった指定がなされていますが、これで問題なくデプロイ
できているでしょうか?Exceptionが発生してしまってうまく
デプロイできないような気がするのですが...。

 どのバージョンのAxisを使われているでしょうか?
また、クラスBarおよびBazは、パッケージに属さないクラス
ということでしょうか?

---
Toshi <[EMAIL PROTECTED]>

On Thu, 21 Jul 2005, FUJIMOTO Jun wrote:

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は

<service name="FooService" provider="java:RPC">
<parameter name="className" value="Service"/>
<parameter name="allowedMethods" value="*"/>
<parameter name="scope" value="application"/>
<beanMapping qname="prj:Bar" xmlns:prj="urn:FooService"
languageSpecificType="Bar"
/>
<beanMapping qname="prj:Baz" xmlns:prj="urn:FooService"
languageSpecificType="Baz"
/>
</service>

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








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



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

メールによる返信