I've got a few ideas:
1) There is no rule that says your service class must be in an aar. In
can be in another jar or in WEB-INF/classes , for example. The
services.xml defines the ServiceClass, but that class can be anywhere
in a higher classloader. This means all your WAR options, such as
exploded, can apply.
2) Use the embedded option as described for a war, but for an aar:
http://www.wso2.net/kb/90
3) Use ehcache . I know this works in tomcat / axis2 as I use it in
my serviceClass sometimes. If you use hibernate you already have
ehcache.
HTH,
Robert
http://www.braziloutsource.com/
On 7/11/06, M S <[EMAIL PROTECTED]> wrote:
Hi,
Well this is my Web Service file:
import java.io.*;
public class MyService2 {
public String echo(String password) {
int ctr = 1;
FileInputStream fin;
try {
fin = (FileInputStream)
getClass().getClassLoader().getResourceAsStream("prime.txt");
BufferedReader br
= new BufferedReader(new InputStreamReader(fin));
ctr = Integer.parseInt(br.readLine());
fin.close();
} catch (Exception e) { System.out.println("prime.txt does not
exist. Creating prime.txt...");}
boolean primeReached = false;
while (!primeReached) {
ctr++;
if (isPrime(ctr) && ctr!=4) {
primeReached = true;
break;
}
}
PrintWriter fout;
try {
fout = new PrintWriter(new FileWriter("c:\\prime.txt"));
fout.println(String.valueOf(ctr));
fout.close();
} catch (Exception e) {e.printStackTrace();}
return Integer.valueOf(ctr).toString();
}
private boolean isPrime(int p) {
int i;
for(i=2;i<(p/2);i++) {
if ( i*(p/i) == p ) return(false);
}
return(true);
}
}
This is my services.xml:
<service>
<operation name="echo">
<messageReceiver
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</operation>
<parameter name="ServiceClass"
locked="false">MyService2</parameter>
</service>
This is my WSDL:
<wsdl:definitions targetNamespace="http://ws.apache.org/axis2">
-
<wsdl:types>
-
<xs:schema targetNamespace="http:///xsd" elementFormDefault="qualified"
attributeFormDefault="qualified">
-
<xs:element name="echo">
-
<xs:complexType>
-
<xs:sequence>
<xs:element type="xs:string" name="param0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
-
<xs:element name="echoResponse">
-
<xs:complexType>
-
<xs:sequence>
<xs:element type="xs:string" name="return"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
-
<wsdl:message name="echoMessage">
<wsdl:part element="ns0:echo" name="part1"/>
</wsdl:message>
-
<wsdl:message name="echoResponse">
<wsdl:part element="ns0:echoResponse" name="part1"/>
</wsdl:message>
-
<wsdl:portType name="MyService2PortType">
-
<wsdl:operation name="echo">
<wsdl:input message="axis2:echoMessage"/>
<wsdl:output message="axis2:echoResponse"/>
</wsdl:operation>
</wsdl:portType>
-
<wsdl:binding type="axis2:MyService2PortType"
name="MyService2SOAP11Binding">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
-
<wsdl:operation name="echo">
<soap:operation style="document" soapAction="urn:echo"/>
-
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
-
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
-
<wsdl:binding type="axis2:MyService2PortType"
name="MyService2SOAP12Binding">
<soap12:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
-
<wsdl:operation name="echo">
<soap12:operation style="document" soapAction="urn:echo"/>
-
<wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
-
<wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
-
<wsdl:binding type="axis2:MyService2PortType"
name="MyService2HttpBinding">
<http:binding verb="POST"/>
-
<wsdl:operation name="echo">
<http:operation location="echo"/>
-
<wsdl:input>
<mime:content type="text/xml"/>
</wsdl:input>
-
<wsdl:output>
<mime:content type="text/xml"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
-
<wsdl:service name="MyService2">
-
<wsdl:port binding="axis2:MyService2SOAP11Binding"
name="MyService2SOAP11port_http">
<soap:address
location="http://localhost:8080/axis2/services/MyService2"/>
</wsdl:port>
-
<wsdl:port binding="axis2:MyService2SOAP12Binding"
name="MyService2SOAP12port_http">
<soap12:address
location="http://localhost:8080/axis2/services/MyService2"/>
</wsdl:port>
-
<wsdl:port binding="axis2:MyService2HttpBinding"
name="MyService2Httpport0">
<http:address
location="http://localhost:8080/axis2/rest/MyService2"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
And this is my client:
public class Client {
public static void main(String[] args) throws Exception {
MyService2Stub stub = new MyService2Stub();
//Create the request
MyService2Stub.Echo request = new MyService2Stub.Echo();
request.setParam0("3IsAnOddPrime");
//Invoke the service
EchoResponse response = stub.echo(request);
System.out.println("Response : " + response.get_return());
}
I get "Response: 1" no matter what I do with the Web Service file for some
reason.
On 7/11/06, Rodrigo Ruiz <[EMAIL PROTECTED]> wrote:
> Hi again, :-)
>
> Mmmmh, I haven't heard anything about this kind of problems with .aar
> files. I am afraid I don't use Axis2 myself, so my knowledge is limited
:-P
>
> Where are you trying to write the file, and how do you get the path?
> Have you tried to write in a fixed absolute path? If you can't create a
> file, for example, at the user's home directory, it could be a
> permissions problem (either at file level, or at server security system
> level).
>
> AFAIK, .aar files can also be deployed as directories, but I will have
> to redirect you to the Axis documentation site (or to anyone else that
> could answer this), I'm sorry.
>
> Michael, there are several good articles at theserverside, and many
> implementations at a "google click" distance ;-)
>
> I would recommend you to start by looking at the ehcache project
> (http://ehcache.sourceforge.net/). It is pretty well documented.
>
> Regards,
> Rodrigo Ruiz
>
>
> Rodrigo Ruiz wrote:
> > Depending on the servlet container you are using, war archives may be
> > considered read-only. In this case you will not be able to write a file
> > within the application context.
> >
> > Some alternatives you have are:
> >
> > - Deploy your application as an "exploded war" (the exact name will vary
> > from container to container). When deploying in this mode, your classes
> > can write files at any location within your context.
> >
> > - Use an absolute path for your file. The path may be configured through
> > JNDI, or System properties, or you might put it into a subfolder of the
> > user home (this is very common in *nix environments).
> >
> >
> > Other options imply to use a different storage type:
> >
> > - Use the User Preferences API to store the value. This API is available
> > starting from Java 1.4.
> >
> > - Store it into the JNDI tree. This only works if the JNDI
> > implementation is writeable and persistent. For example, AFAIK, it will
> > not work in Tomcat
> >
> > - Use a DBMS. It may seem an overkill solution, but there are some very
> > lightweight databases there. They may be not appropriate for enterprise
> > solutions, but for a single value they are more than enough. Moreover,
> > it is possible that you already use one for another service.
> >
> > - Use a distributed cache. Another overkill solution, but you may be
> > already using it for another service, or find out other places where it
> > may be useful ;-)
> >
> > These options, although more complex to implement, bring you an extra
> > feature. They make your service "distributable", that is, deployable on
> > a cluster of redundant servers. With local files, each node in the
> > cluster would have its own "counter".
> >
> > Hope this helps,
> > Rodrigo Ruiz
> >
> > Michael McIntosh wrote:
> >> Your problem seems very similar to mine - It would be great if someone
> >> would point us to the documentation for the rules related to file
access
> >> (read/write, path, etc.)
> >>
> >> Thanks,
> >> Mike
> >>
> >> "M S" < [EMAIL PROTECTED]> wrote on 07/10/2006 10:40:47 AM:
> >>
> >>> Hi,
> >>>
> >>> I have a web service that is supposed to generate prime numbers. I
> >>> store the latest generated prime number in a file called prime.txt.
> >>> So for example, if the program is run and generated 3, 3 will be
> >>> stored in prime.txt and next time it will generate 5. If there is no
> >>> prime.txt, the program will generate 1 and try to create prime.txt.
> >>>
> >>> My problem is that my web service application does not seem to be
> >>> able to read/write a file. Any ideas on how this should be done?
> >>> Notice that the prime.txt must be able to saved for the duration of
> >>> the web service's lifetime.
> >>>
> >>> Regards
> >>
---------------------------------------------------------------------
> >> To unsubscribe, e-mail:
[EMAIL PROTECTED]
> >> For additional commands, e-mail: [EMAIL PROTECTED]
> >>
> >>
> >>
> >
>
> --
>
-------------------------------------------------------------------
> GRIDSYSTEMS Rodrigo Ruiz Aguayo
> Parc Bit - Son Espanyol
> 07120 Palma de Mallorca mailto:[EMAIL PROTECTED]
> Baleares - EspaƱa Tel:+34-971435085
Fax:+34-971435082
> http://www.gridsystems.com
>
-------------------------------------------------------------------
>
>
> --
> No virus found in this outgoing message.
> Checked by AVG Free Edition.
> Version: 7.1.394 / Virus Database: 268.9.10/384 - Release Date: 10/07/2006
>
>
>
---------------------------------------------------------------------
> 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]