I have written this .dd file:
<isd:service
xmlns:isd="http://xml.apache.org/xml-soap/deployment"
id="urn:Composizione">
<isd:provider
type="java"
scope="Application"
methods="compone">
<isd:java
class="service_controller"
static="false"/>
</isd:provider>
<isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener>
<isd:mappings>
</isd:mappings>
</isd:service>
this client ( in
%SOAP-HOME%\WEB-INF\classes)
import java.net.*;
import
java.util.*;
import java.io.*;
import org.apache.soap.*;
import
org.apache.soap.rpc.*;
public class Client {
static
boolean corretto1=false;
static boolean
corretto2=false;
static boolean Copy(String
path, String filename) throws Exception {
boolean flag=false;
File pathTo = new
File(path + filename);
File pathFrom =
new File(filename);
try {
FileInputStream
inputFile = new FileInputStream(pathFrom);
int bytes =
inputFile.available();
pathTo.createNewFile();
FileOutputStream outputFile = new FileOutputStream(pathTo);
int readBytes = 0;
while (readBytes <
bytes) {
outputFile.write(inputFile.read());
readBytes++;
}
inputFile.close();
outputFile.close();
flag=true;
} catch (FileNotFoundException e) {
flag=false;
System.out.println("Il file: " + pathFrom.toString() + ", non esiste!");
e.printStackTrace();
}
return flag;
}
public static void main(String[]
args) throws Exception {
String
c_Nomefile="";
String
c_Nomefile1="";
String
c_Nomefile2="";
String
CATALINA_HOME=System.getProperty("catalina.home");
String [] lista = new
File(".").list();
URL url = "" URL("http://localhost:8080/soap/servlet/rpcrouter");
System.out.println("ELENCO
SERVIZI:");
for(int cx=0;
cx<lista.length;
cx++)
if ( new
File(lista[cx]).isFile()
)
//verifica se è
file
if ( lista[cx].toLowerCase().lastIndexOf(".owl") >=
0) //e con estensione
owl
System.out.println((" * " +
lista[cx]+"
").substring(0,20));
try
{
do
{
System.out.print("Servizio principale (digitare anche l'estensione):
");
BufferedReader in1= new BufferedReader(new
InputStreamReader(System.in));
c_Nomefile1 =
in1.readLine();
} while
(!(c_Nomefile1.endsWith(".owl")));
do {
System.out.print("Servizio da comporre (digitare anche l'estensione):
");
BufferedReader in2= new BufferedReader(new
InputStreamReader(System.in));
c_Nomefile2 =
in2.readLine();
} while
(!(c_Nomefile1.endsWith(".owl")));
c_Nomefile = c_Nomefile1 + c_Nomefile2; // crea nome file
composto
} catch (Exception e) {
e.printStackTrace(); }
c_Nomefile =
c_Nomefile1.substring(0,c_Nomefile1.indexOf('.')) + c_Nomefile2;
corretto1=Copy(CATALINA_HOME+"\\bin\\",c_Nomefile1);
corretto2=Copy(CATALINA_HOME+"\\bin\\",c_Nomefile2);
if ((corretto1==true) && (corretto2==true))
{
Call call = new
Call();
call.setTargetObjectURI("urn:Composizione");
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
Vector params = new
Vector();
params.addElement(new Parameter("file_1", String.class, c_Nomefile1,
null));
params.addElement(new Parameter("file_2", String.class, c_Nomefile2,
null));
params.addElement(new Parameter("file_composto", String.class, c_Nomefile,
null));
params.addElement(new Parameter("path_output", String.class,
CATALINA_HOME+"\\webapps\\soap\\WEB-INF\\classes\\",
null));
call.setParams(params);
try {
call.setMethodName("compone");
Response resp = call.invoke(url,
"");
if (resp.generatedFault())
{
Fault fault =
resp.getFault();
System.err.println("Generated fault: " +
fault);
} else
{
Parameter ret =
resp.getReturnValue();
Object value =
ret.getValue();
switch (value.hashCode())
{
case 0: System.out.println("I due file non sono componibili");
break;
case 1: System.out.println("I due file sono stati composti nel file "
+c_Nomefile);
break;
case -1: System.out.println("Utility interrotta per errori");
break;
}
}
} catch (SOAPException
e) {
System.err.println("Caught SOAPException (" +e.getFaultCode() + "): "
+e.getMessage());
}
}
try
{
System.out.print("\nPremere INVIO per
terminare...\n");
System.in.read();
} catch(Exception e)
{}
}
}
this service ( in
%SOAP-HOME%\WEB-INF\classes)
import java.io.*;
//import
xml_pars;
public class service_controller
{
public static int
c_Comp;
//esito della composizione (1=ok, 0=non composto, -1=errore
tag)
public static String
tempor;
//final static String fileTMP = "tmp.owl";
private static String
c_Tabella;
private static xml_pars owl = new xml_pars();
//classe parsing .XML
private static String linea;
private
static boolean
corretto;
//---------------------//
//
COMPOSIZIONE //
MAIN
//---------------------//
//Costruttori della
classe: //si possono
togliere
public
service_controller () {
}
public
service_controller (String file_1, String file_2, String file_composto,
String path_output)
{
compone(file_1, file_2, file_composto,
path_output);
}
public static String get_output() { if (c_Comp <= 0) tempor =
""; return tempor; } //metodo di controllo
public static int
compone0(String file_1, String file_2, String file_composto, String
path_output) {
metodi_xml(file_2);
return (c_Comp = c_ProceduraTag(file_1));
}
public static
int compone(String file_1, String file_2, String file_composto, String
path_output) {
if (compone0(file_1,
file_2, file_composto, path_output) <= 0) {
System.out.println("\nI due servizi non sono tra loro
componibili.");
waitkey();
} else
{
System.out.println("\nFILE
COMPOSTO:\n");
int cx = 0;
owl.put_parsing(get_output());
do { if ( ((cx++)%16) == 0)
waitkey();
System.out.print(owl.ctags());
} while (owl.nido >= 0 || cx<3);
if (path_output.length() > 0)
owl.newdir(path_output); //se non c'Š
crea la
cartella
owl.put_parsing(get_output());
owl.save_parsing(path_output + "/" + file_composto); //c_EliminaFile(); fare
in modo che in path_output compaia il percorso fino a
soap
//if (file_1.length() > 0) { owl.load_parsing(file_1);
owl.save_parsing(path_output + "/" + file_1);
}
//if (file_2.length() > 0) { owl.load_parsing(file_2);
owl.save_parsing(path_output + "/" + file_2); }
}
return c_Comp;
}
//---------------------//
//
METODI XML //
PROCEDURE UTILITY
//---------------------//
// Carica un
file.owl e lo compila in una tabella di: tipo, nome del tag +
\n
public static void metodi_xml (String file)
{
System.out.print("Apro il file
"+file+" ... ");
if (! (corretto =
owl.load_parsing(file))
)
System.out.println("Errore!");
else { // crea
tabella
System.out.println("Ok!\nCompilo la
tabella...");
owl.tag(2); //salta
header (tag <?> e tag
Ontology)
c_Tabella = tempor =
"";
while(true)
{
c_AnalisiTag(owl.tags()); if (owl.nido < 0)
break;
if (linea.length() > 1) c_Tabella += linea +
"\n";
tempor +=
owl.tag_root(owl.xml_id);
}
}
}
// Compila il
singolo tag (tipo, nome del tag + \n)
public static int
c_AnalisiTag(String tag)
{ // ritorna
tipo tag e linea
linea =
".";
if (owl.si_tag(tag,"<owls:")
> 0)
{
linea = owl.search_true(tag, "owls:Class ", "C")
+
owl.search_true(tag, "owls:ObjectProperty ", "P")
+
//owl.search_true(tag, "owls:Ontology ", "O")
+
linea;
if (linea.length() == 1)
{
System.out.println("Tag sconosciuto: " +
tag);
corretto = false;
};
linea += owl.search_tag(tag, "name=");
//"owls:name"
};
return
linea.charAt(0);
}
// Esegue la composizione del file con il
file passato in metodi_xml
public static int c_ProceduraTag(String
file) { // esegue
utility
String temp, tag; int comp =
0; temp = tag = "";
System.out.print("Apro il file "+file+" ...
");
if (! owl.load_parsing(file) )
{
System.out.println("Errore!"); corretto = false;
};
if (corretto)
{
System.out.println("Ok!\nAvvio
utility...");
owl.tag(2); //salta header (tag <?> e tag
Ontology)
do { tag = owl.tags(); //o tag =
owl.tag(0);
int tipo =
c_AnalisiTag(tag);
if (linea.length() > 1)
{
tag =
owl.tag_root(owl.xml_id);
if (c_Tabella.indexOf(linea) < 0) { temp += tag;
}
else { if (tipo=='C') comp = 1;
//...
}
}
} while (owl.nido >= 0);
}
if (!corretto) {
System.out.println("Utility interrotta per errori."); comp = -1;
};
owl.reset(); //aggiunge
intestazione padre
tempor =
owl.tags() + owl.tags() + tempor + temp +
tag;
return
comp;
}
//---------------------//
//
OUTPUT
// PROCEDURE
OUTPUT
//---------------------//
public static void waitkey()
{ // Attende il tasto
invio
try { System.out.print("\nPremere INVIO per
proseguire...\n");
System.in.read(); } catch(Exception e) {}
}
//--------------
// MAIN DI
PROVA
//--------------
//public static void main(String
[]argv) {
//
compone("PROVA1.OWL", "PROVA2.OWL", "prova1prova2.owl",
".");
//}
}
but I received this exception (the
xml_pars.class is in %SOAP-HOME%\WEB-INF\classes)
Generated fault: [Attributes={}]
[faultCode=SOAP-ENV:Server] [faultString=Except
ion from service object:
null] [faultActorURI=/soap/servlet/rpcrouter]
[DetailEn
tries=
[(0)=<stackTrace>java.lang.NullPointerException
at xml_pars.tag(Unknown
Source)
at
xml_pars.reset(Unknown Source)
at
service_controller.c_ProceduraTag(service_controller.java:104)
at
service_controller.compone0(service_controller.java:23)
at
service_controller.compone(service_controller.java:26)
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.soap.server.RPCRouter.invoke(RPCRouter.java:146)
at
org.apache.soap.providers.RPCJavaProvider.invoke(RPCJavaProvider.java
:129)
at
org.apache.soap.server.http.RPCRouterServlet.doPost(RPCRouterServlet.
java:354)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:247)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:193)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:256)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
t.invokeNext(StandardPipeline.java:643)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:480)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:191)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
t.invokeNext(StandardPipeline.java:643)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:480)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:
2422)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:180)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
t.invokeNext(StandardPipeline.java:643)
at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatche
rValve.java:171)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
t.invokeNext(StandardPipeline.java:641)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:163)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
t.invokeNext(StandardPipeline.java:641)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:480)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:174)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
t.invokeNext(StandardPipeline.java:643)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:480)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:19
9)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:828)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
ssConnection(Http11Protocol.java:700)
at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java
:584)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP
ool.java:683)
at java.lang.Thread.run(Thread.java:534)
</stackTrace>]
]
[FaultEntries=]
Why? Can anyone help me?