Forum » Programiranje » [Java] Web service, AP in ftp
[Java] Web service, AP in ftp
KaelMage ::
Prosil bi za pomoč: izdelujem aplikacijo, ki bo omogočala izdajanje računov strankam, skladnih s standardom E-Slog - stvar deluje (generira torej xml obliko računa, ter html obliko računa in jo shrani kot datoteko na disk). Sedaj sem dobil še dodatno nalogo, nadgraditi aplikacijo s spletno storitvijo, ki bo sprejele where pogoj sql stavka (katere račune izberemo) in kreirane datoteke prenesla na ftp disk. Kreiral sem ustrezno spletno storitev z metodo kreirajXmlRačune, v kateri kreiram primerek aplikacije xmlRačuni (torej prej sem jo zagnal v main metodi, sedaj pa taisto naredim v telesu funkcije WS). Stvar spet uspešno deluje: kreira račune in jih shrani na disk, zaplete pa se pri ftpUploadu - javi mi Exception pri bindigu, ko kličem metodo storeFile() razreda FTPCLient - medtem ko povezava na FTP uspe, uspe pridobivanje podatkov o FTP in podobno. Bi lahko kdo dal kakšno idejo, zakaj to ne deluje? Lepo prosim?
Uporabljam: NetBeans 5.5.1, Java Sun Apllication Server vgrajen v netbeanse, Java 6 Update 2, ftp knjižnica pa je commons-net-1.4.1 (apache). Kot zanimivost: prenos datotek, v kolikor aplikacije ne poganjam preko WS, ampak z main metodo (torej se ne deploya na werb server) deluje.
Mislil sem, da je najprej kriva kakšna moja implementacijska napaka v omenjeni aplikaciji, zato sem naredil še en testni WS, ki prebere neko datoteko iz diska in jo skuša poslat na FTP - napaka je ista. Primer kode, v metodi storeFile javi napako.
[code]
@WebMethod
public boolean operation(@WebParam(name = "fileName") String fileName)
{
try
{
FTPClient f = new FTPClient(); // Primerek FTPClienta, iz knjiznice Apache Commons NET
f.connect("153.5.24.XX", XXX);
f.login("user", "pass");
System.out.println(f.getDataConnectionMode());
FileInputStream fs = new FileInputStream(new File("C:/Logotip.jpg")); // Stream vhodne datoteke
f.storeFile("test.txt", fs);
f.disconnect();
fs.close();
}
catch (Exception e)
{
e.printStackTrace();
}
return false;
}
[/code]
[code]
java.net.BindException: Cannot assign requested address: bind
at sun.nio.ch.Net.bind(Native Method)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:119)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:59)
at com.sun.enterprise.server.ss.provider.ASServerSocket.bind(ASServerSocket.java:278)
at com.sun.enterprise.server.ss.provider.ASServerSocketImpl.listen(ASServerSocketImpl.java:153)
at java.net.ServerSocket.bind(ServerSocket.java:320)
at java.net.ServerSocket.init(ServerSocket.java:185)
at org.apache.commons.net.DefaultSocketFactory.createServerSocket(DefaultSocketFactory.java:155)
at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:475)
at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:388)
at org.apache.commons.net.ftp.FTPClient.storeUniqueFile(FTPClient.java:1510)
at ftpws.NewWebService.operation(NewWebService.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke& #40;DelegatingMethodAccessorIm
pl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.xml.ws.server.PeptTie._invoke(PeptTie.java:61)
at com.sun.xml.ws.protocol.soap.server.SOAPMessageDispatcher.invokeEndpoint(SOAPMessageDispatcher.java:280)
at com.sun.xml.ws.protocol.soap.server.SOAPMessageDispatcher$SoapInvoker.invoke(SOAPMessageDispatcher.java:588)
at com.sun.xml.ws.protocol.soap.server.SOAPMessageDispatcher.receive(SOAPMessageDispatcher.java:147)
at com.sun.xml.ws.server.Tie.handle(Tie.java:90)
at com.sun.enterprise.webservice.JAXWSServlet.doPost(JAXWSServlet.java:195)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:397)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:278)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:536)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:179)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:73)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:182)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)
at com.sun.enterprise.web.VirtualServerPipeline.invoke(VirtualServerPipeline.java:120)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:939)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:137)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:536)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:939)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:239)
at com.sun.enterprise.web.connector.grizzly.ProcessorTask.invokeAdapter(ProcessorTask.java:667)
at com.sun.enterprise.web.connector.grizzly.ProcessorTask.processNonBlocked(ProcessorTask.java:574)
at com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:844)
at com.sun.enterprise.web.connector.grizzly.ReadTask.executeProcessorTask(ReadTask.java:287)
at com.sun.enterprise.web.connector.grizzly.ReadTask.doTask(ReadTask.java:212)
at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:252)
at com.sun.enterprise.web.connector.grizzly.WorkerThread.run(WorkerThread.java:75)
[/code]
In še zanimivost: tudi spodnja koda javi povsem isti exception. [b]V kolikor pa je nastavljen localhost za ip, pa ftp prenosi delujejo (postavljen ftp na istem pcju) in takšen bind prav tako uspe. Ima kdo idejo zakaj to ne dela? Sklepam da bo kakšen security issue ali pa kakšna nastavitev AP strežnika.
[code]
ServerSocket ss = new ServerSocket();
ss.bind(new InetSocketAddress("192.168.0.100", 4000));
System.out.println("ServerSocket Bound");
ss.accept();
[/code]
Uporabljam: NetBeans 5.5.1, Java Sun Apllication Server vgrajen v netbeanse, Java 6 Update 2, ftp knjižnica pa je commons-net-1.4.1 (apache). Kot zanimivost: prenos datotek, v kolikor aplikacije ne poganjam preko WS, ampak z main metodo (torej se ne deploya na werb server) deluje.
Mislil sem, da je najprej kriva kakšna moja implementacijska napaka v omenjeni aplikaciji, zato sem naredil še en testni WS, ki prebere neko datoteko iz diska in jo skuša poslat na FTP - napaka je ista. Primer kode, v metodi storeFile javi napako.
[code]
@WebMethod
public boolean operation(@WebParam(name = "fileName") String fileName)
{
try
{
FTPClient f = new FTPClient(); // Primerek FTPClienta, iz knjiznice Apache Commons NET
f.connect("153.5.24.XX", XXX);
f.login("user", "pass");
System.out.println(f.getDataConnectionMode());
FileInputStream fs = new FileInputStream(new File("C:/Logotip.jpg")); // Stream vhodne datoteke
f.storeFile("test.txt", fs);
f.disconnect();
fs.close();
}
catch (Exception e)
{
e.printStackTrace();
}
return false;
}
[/code]
[code]
java.net.BindException: Cannot assign requested address: bind
at sun.nio.ch.Net.bind(Native Method)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:119)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:59)
at com.sun.enterprise.server.ss.provider.ASServerSocket.bind(ASServerSocket.java:278)
at com.sun.enterprise.server.ss.provider.ASServerSocketImpl.listen(ASServerSocketImpl.java:153)
at java.net.ServerSocket.bind(ServerSocket.java:320)
at java.net.ServerSocket.init(ServerSocket.java:185)
at org.apache.commons.net.DefaultSocketFactory.createServerSocket(DefaultSocketFactory.java:155)
at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:475)
at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:388)
at org.apache.commons.net.ftp.FTPClient.storeUniqueFile(FTPClient.java:1510)
at ftpws.NewWebService.operation(NewWebService.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke& #40;DelegatingMethodAccessorIm
pl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.xml.ws.server.PeptTie._invoke(PeptTie.java:61)
at com.sun.xml.ws.protocol.soap.server.SOAPMessageDispatcher.invokeEndpoint(SOAPMessageDispatcher.java:280)
at com.sun.xml.ws.protocol.soap.server.SOAPMessageDispatcher$SoapInvoker.invoke(SOAPMessageDispatcher.java:588)
at com.sun.xml.ws.protocol.soap.server.SOAPMessageDispatcher.receive(SOAPMessageDispatcher.java:147)
at com.sun.xml.ws.server.Tie.handle(Tie.java:90)
at com.sun.enterprise.webservice.JAXWSServlet.doPost(JAXWSServlet.java:195)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:397)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:278)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:536)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:179)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:73)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:182)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)
at com.sun.enterprise.web.VirtualServerPipeline.invoke(VirtualServerPipeline.java:120)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:939)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:137)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:536)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:939)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:239)
at com.sun.enterprise.web.connector.grizzly.ProcessorTask.invokeAdapter(ProcessorTask.java:667)
at com.sun.enterprise.web.connector.grizzly.ProcessorTask.processNonBlocked(ProcessorTask.java:574)
at com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:844)
at com.sun.enterprise.web.connector.grizzly.ReadTask.executeProcessorTask(ReadTask.java:287)
at com.sun.enterprise.web.connector.grizzly.ReadTask.doTask(ReadTask.java:212)
at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:252)
at com.sun.enterprise.web.connector.grizzly.WorkerThread.run(WorkerThread.java:75)
[/code]
In še zanimivost: tudi spodnja koda javi povsem isti exception. [b]V kolikor pa je nastavljen localhost za ip, pa ftp prenosi delujejo (postavljen ftp na istem pcju) in takšen bind prav tako uspe. Ima kdo idejo zakaj to ne dela? Sklepam da bo kakšen security issue ali pa kakšna nastavitev AP strežnika.
[code]
ServerSocket ss = new ServerSocket();
ss.bind(new InetSocketAddress("192.168.0.100", 4000));
System.out.println("ServerSocket Bound");
ss.accept();
[/code]
- spremenilo: snow ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | edavki ubuntu 13 chromeOddelek: Omrežja in internet | 4886 (2541) | harvey |
» | Eclipse in windows 8Oddelek: Pomoč in nasveti | 1227 (980) | mihibo5 |
» | Ne zazna R.class -androidOddelek: Programiranje | 1295 (1133) | Marat |
» | [Android]Vprasanje glede GUI ter pripadajoce XML datotekeOddelek: Programiranje | 3488 (3374) | KernelPanic |
» | tomcat in datasourceOddelek: Programiranje | 1993 (1750) | infiniteLoop |