- PR -

WebサービスからWebサービスを呼ぶ

投稿者投稿内容
takah
会議室デビュー日: 2004/11/26
投稿数: 15
投稿日時: 2004-12-13 13:15
こんにちは.

Tomcat5.0上に公開したWebサービスの中で,さらに別のサービスを呼び出す処理を実装しましたが,エラーが出てしまい,原因がわからずになやんでいます.
AXIS1.1を利用しています.サービス実装は以下の通りです.

package orderAdapter;

import org.apache.axis.client.Service;
import org.apache.axis.client.Call;
import javax.xml.namespace.QName;
import java.net.URL;

public class OrderAdapterWrapper {
public java.lang.String OrderAdapter( java.lang.String a , java.lang.String b ) throws Exception {
Service service = null;
Call call = null;
java.lang.String rtn = null;

try {
service = new Service();
call = (Call)service.createCall();
call.setTargetEndpointAddress(new URL("http://localhost:8080/axis/services/OrderAdapter"));
call.setTimeout(new Integer(1000*10));
call.setOperationName(new QName("urn:adapter", "OrderAdapter"));
call.addParameter( new QName("", "a"), new QName("http://www.w3.org/2001/XMLSchema", "string"), java.lang.String.class, javax.xml.rpc.ParameterMode.IN);
call.addParameter( new QName("", "b"), new QName("http://www.w3.org/2001/XMLSchema", "string"), java.lang.String.class, javax.xml.rpc.ParameterMode.IN);
call.setReturnType(new QName("http://www.w3.org/2001/XMLSchema", "string"), java.lang.String.class);
rtn = (java.lang.String)call.invoke(new java.lang.Object[] { a , b });
} catch (Exception e) {
e.printStackTrace();
throw e;
}
return rtn;
}
}


上のソースの,次の行で,以下のような問題が発生しています.
call.setReturnType(new QName("http://www.w3.org/2001/XMLSchema", "string"), java.lang.String.class);

エラー
java.lang.NullPointerException
at org.apache.axis.client.Call.getTypeMapping(Call.java:2069)
at org.apache.axis.client.Call.setReturnType(Call.java:1054)
at org.apache.axis.client.Call.setReturnType(Call.java:1073)
at orderAdapter.OrderAdapterWrapper.OrderAdapter(OrderAdapterWrapper.jav
a:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.j
ava:402)
at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider
.java:309)
at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:
333)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrateg
y.java:71)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:150)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:120)
at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:481
)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:323)
at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:85
4)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBas
e.java:339)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
eContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(Standard
ContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
eContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
eContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:117)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
eContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
eContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)

at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:16
0)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:793)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
ssConnection(Http11Protocol.java:702)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java
:571)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP
ool.java:644)
at java.lang.Thread.run(Thread.java:534)


DeserializationContextImpl内でのNullPointerExceptionのようです.
しかし,同じソースコードをローカルで実行した場合には,問題なく実行できることから判断すると,どうも,ローカルには存在するが,Tomcat上には存在しない何かがあるように思えます.でも,それが何なのかはわかりません.

アドバイスをいただければ幸いです.よろしくお願いします.
nil
会議室デビュー日: 2003/06/17
投稿数: 14
投稿日時: 2004-12-13 13:30
問題の出る環境ではJ2SE5.0を使用していませんか?
axisのNPEで1.4.2にダウングレードして対処したことがあります。
takah
会議室デビュー日: 2004/11/26
投稿数: 15
投稿日時: 2004-12-13 13:52
いえ,Javaは1.4.2を利用しています.
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-12-13 14:29
まったくのあてずっぽですが、Axisのライブラリはどこに入れていますか?
takah
会議室デビュー日: 2004/11/26
投稿数: 15
投稿日時: 2004-12-13 14:56
uk様

Axisのライブラリは,%TOMCAT_HOME%/webapp/axis/lib内に入っています.
また,別のアプリケーション(BPELエンジン)のために,%TOMCAT_HOME%/shared/lib内にも入っています.

よろしくお願いします.
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-12-13 16:26
引用:

takahさんの書き込み (2004-12-13 14:56) より:
Axisのライブラリは,%TOMCAT_HOME%/webapp/axis/lib内に入っています.


問題になっているWebサービスのコンテキストがこれということですか?
#axis/libではなく、axis/WEB-INF/libのような気がしますが

引用:

また,別のアプリケーション(BPELエンジン)のために,%TOMCAT_HOME%/shared/lib内にも入っています.


これを一旦削除して再起動してから実行してみたらどうなりますか?
takah
会議室デビュー日: 2004/11/26
投稿数: 15
投稿日時: 2004-12-13 20:16
アドバイスありがとうございます.

>問題になっているWebサービスのコンテキストがこれということですか?
>#axis/libではなく、axis/WEB-INF/libのような気がしますが

その通りでした,すみません.

さて,実験をしてみたのですが,shared/lib内のaxisライブラリを削除してしまうと,BPELエンジンが利用不可能になってしまうので,無理でした.
一方,axis/WEB-INF/lib内のaxisライブラリを削除すると,問題なく動作しました.

複数のaxisライブラリの競合ということでしょうか・・・?
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-12-13 22:07
引用:

takahさんの書き込み (2004-12-13 20:16) より:
さて,実験をしてみたのですが,shared/lib内のaxisライブラリを削除してしまうと,BPELエンジンが利用不可能になってしまうので,無理でした.


BPWS4Jですか? 一台のTomcatでWebサービス連携やってみてるのかな。

引用:

一方,axis/WEB-INF/lib内のaxisライブラリを削除すると,問題なく動作しました.
複数のaxisライブラリの競合ということでしょうか・・・?


ちょっとこれだけだとなんともいえないですが、複数のライブラリが競合するような状態だと
不具合が出た経験は何度かあります。どちらかというと、なるべくライブラリはローカル
(WEB-INF/lib)に入れたほうが無難だと思いますが。

スキルアップ/キャリアアップ(JOB@IT)