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

Reply via email to