Hi,
I wrote one service "Service3", it uses remote web service "Service1"
and "Service2".
It works well when I start it in standalone JVM.
Now I want to write a web client for "Service3".
I read the webapps\helloworld-servlet and use implementation.web for the web
client.
But I met some problems.
1. My composite for the web client is like the following
---------------------------------------------------------------------------------------------------------------------------------------------------
<component name="foo">
<implementation.web web-uri=""/>
<reference name="service3" target="Service3Component" />
</component>
<component name="Service3Component">
<implementation.java class="Service3Impl"/>
<reference name="service2">
<interface.java interface="Service2Interface" />
<binding.ws uri=uri of service2 />
</reference>
<reference name="service1">
<interface.java interface="Service1Interface" />
<binding.ws uri=uri of service1 />
</reference>
</component>
//** Service2 interface
public interface Service2Interface{
public Message[] getMessages(UserData userData, int count);
}
-------------------------------------------------------------------------------------------------------------------------------------------------
//** Service1 interface
public interface Service1Interface{
public String getResult(String iputText);
}
//** Service3 interface
public interface Service3Interface{
public String[] getProcessedResult(String username, String password,
int count);
}
//** this service calls Service2 to get messages and send each message to
Service1 to get
// processed result. Service3 returns the processed result as a String
array.
public class Service3Impl implements Service3Interface{
@Reference
private Service2 service2;
@Reference
private Service1 service1;
public String[] getProcessedResult(String username, String password,
int count){
UserData userData = new UserData();
userData.setUsername(username);
userData.setPassword(password);
Message[] messages = service2.getMessages(userData, count);
String[] result = new String[messages.length];
for(int i=0; i < messages.length; i++){
result[i] = service1.getResult( messages[i].getText() );
}
return result;
}
}
--------------------------------------------------------------------------------------------------------------------------------------------------
I used self defined POJOs in Service2Interface, such as Message and
UserData.
It works well in standalone JVM. I do not need to concern the
transformation of self defined POJOs between Service3
and Service2. It seems that Tuscany do these transformation itself...
But when I use this in implementation.web, I got
"java.lang.IllegalArgumentException: Argument is not an array" in
Service3 at line "Message[] messages = service2.getMessages(userData,
count);".
I tried to comment this line and set the messages by myselt, then it
works.
I don't know why this exception happens. In standalone JVM it works well.
Anyone please tell me....
2. In the webapps\helloworld-servlet sample, I copy all of the jar of
2.0.M5 into WEB-INF\lib(in eclipse)
but it can not work.
It works when I use the maven generated jar
"tuscany-base-nodep-2.0-M5.jar" or "tuscany-base-2.0-M5.jar".
This seems not make sense, I used the whole lib of 2.0.M5.
Anbody can tell me why?
PS. I use eclipse and have not learn maven until now.
The error message is in the following
-----------------------------------------------------------------------------------------------------------------------------------------------------
INFO: StandardWrapper.Throwable
java.lang.NullPointerException at
org.apache.tuscany.sca.implementation.web.runtime.ComponentContextProxy.getService(ComponentContextProxy.java:66)
at sample.HelloworldServlet.init(HelloworldServlet.java:46)
at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173)
at
org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:809)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
2010/7/21 下午 03:57:58 org.apache.catalina.core.StandardWrapperValve invoke
INFO: Allocate exception for servlet HelloworldServlet
java.lang.NullPointerException at
org.apache.tuscany.sca.implementation.web.runtime.ComponentContextProxy.getService(ComponentContextProxy.java:66)
at sample.HelloworldServlet.init(HelloworldServlet.java:46)
at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173)
at
org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:809)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
-------------------------------------------------------------------------------------------------------------------------------------------------
Thanks,
Tyrone