# Problem - Ansteuerung von Hardware über Webservices



## deathhero (23. Jan 2006)

Hallo,

Ich habe folgendes kleines Problem. Ich muss diverse elektronische Geräte ansteuern.(Funktionsgenerator, Oszi, Roboter  ect...)
Die gesamte Ansteuerung funktioniert bereits.

Prinzip:  Methode  hebeArm -> dann macht der Roboter das.
Die Geräte werden alle über die RS232 Schnittstelle angesteuert.

Wenn ich die Ansteuerungsmethoden aus einem Testprogramm(Konsolenanwendung) aufrufe, funktioniert alles problemlos.
Packe ich allerdings die Methode in ein Webservices(sprich ich rufe von der Ansterungsklasse eine Methode auf), dann passiert gar nichts!

IDE:  Netbeans 4.1

Woran kann das liegen?  Er wirft keine Exception oder zeigt sonst einen Fehler an?

mfg


----------



## deathhero (25. Jan 2006)

Habe es jetzt einmal zumindest geschafft an die Fehlermeldung zu kommen:

Sieht so aus:

```
java.security.AccessControlException: access denied (java.io.FilePermission C:\j2sdk1.4.2_09\jre\lib\javax.comm.properties delete)
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:269)
        at java.security.AccessController.checkPermission(AccessController.java:401)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:524)
        at java.lang.SecurityManager.checkDelete(SecurityManager.java:982)
        at javax.comm.CommPortIdentifier.getPortIdentifiers(CommPortIdentifier.java:70)
        at ws.ComWaveIO.init(ComWaveIO.java:23)
        at ws.WaveControl.executeCommand(WaveControl.java:15)
        at ws.NewWebServiceImpl.operation(NewWebServiceImpl.java:19)
        at ws.NewWebServiceSEI_Tie.invoke_operation(NewWebServiceSEI_Tie.java:54)
        at ws.NewWebServiceSEI_Tie.processingHook(NewWebServiceSEI_Tie.java:124)
        at com.sun.xml.rpc.server.StreamingHandler.handle(StreamingHandler.java:321)
        at com.sun.xml.rpc.server.http.JAXRPCServletDelegate.doPost(JAXRPCServletDelegate.java:443)
        at com.sun.enterprise.webservice.JAXRPCServlet.doPost(JAXRPCServlet.java:50)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:767)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:860)
        at sun.reflect.GeneratedMethodAccessor59.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:249)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAsPrivileged(Subject.java:500)
        at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:282)
        at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:165)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:257)
        at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:55)
        at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:161)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:263)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551)
        at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:225)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:173)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:132)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:933)
        at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:185)
        at com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:653)
        at com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:534)
        at com.sun.enterprise.web.connector.grizzly.ProcessorTask.doTask(ProcessorTask.java:403)
        at com.sun.enterprise.web.connector.grizzly.WorkerThread.run(WorkerThread.java:55)
```

ich arbeite aber auf einem normalen rechner mit admin rechten. sprich es müsste eigentlich jeder auf die datei zugreufen können, oder?

mfg


----------



## Bleiglanz (25. Jan 2006)

nur eine Vermutung:

beim Betrieb des Endpoints im Webcontainer greift die Security-Policy für den (in dem Fall im Netbeans integrierten??) Tomcat-Server und verhindert den Zugriff

anpassen...


----------



## deathhero (27. Jan 2006)

hi, 

danke für deine antwort. allerdings verstehe ich sie nicht ganz.

Der Sun Java System Application Server 8.1 und der Tomcat Server sind schon integriert im Netbeans...Stimmt!

Doch wo liegen jetzt die Probleme?



> Endpoints im Webcontainer greift die Security-Policy für den (in dem Fall im Netbeans integrierten??) Tomcat-Server und verhindert den Zugriff


Also der Tomcat verhindert den Zugriff auf die COM Schnittstelle, bzw auf die javax.comm.properties Datei?

 :autsch: 

sg


----------



## Bleiglanz (27. Jan 2006)

ist nur eine Vermutung, es könnte schon sein

allerdings weiss ich nicht sicher, ob der Tomcat im Netbeans überhaupt mit -security gestartet wird?

ggf. ist das $TOMCAT/conf/catalina.policy

dafür relevant

java.io.FilePermission C:\j2sdk1.4.2_09\jre\lib\javax.comm.properties delete

spricht eigentlich dafür.


----------



## deathhero (30. Jan 2006)

so habe jetzt noch einmal nachgeschaut...

am tomcat liegt es nicht, da ich den bei den webservices desn sun application server verwende.

jetzt hätte ich eine ander idee:
über ein servlet lassen sich die geräte ansteuern(sprich tomcat ect. GEHT!)

also müsste ich nur über ein webservice das servlet aufrufen. nur wie geht das?

sg


----------



## KSG9|sebastian (30. Jan 2006)

indem du ne verbindung zu der url des servlets aufbaust..

URLConnection nennt sich glaub ich die Klasse


----------



## Bleiglanz (30. Jan 2006)

das wär dann wirklich mal ein toller Webservice, der über eine URLConnection auf ein lokales Servlet zugreift 

implementier doch den Webservice-Endpoint als Servlet!


----------



## deathhero (30. Jan 2006)

was ist ein webservice-endpoint?

URLConnection kenne ich, aber was soll ich da das Servlet damit aufrufen. Nur mit der URl + connect() kenn das ja nicht gehn...
GET Request müsste doch auch dabei sein, oder?  ???:L


----------



## deathhero (31. Jan 2006)

im prinzip müsste ich ja nur das rauschicken...

127.0.0.1 "GET /servlet/SimpleServlet HTTP/1.1" 

oder?

sg


----------



## Bleiglanz (1. Feb 2006)

ja, new URL("http://127.0.0.1/servlet/SimpleServlert") usw.

aber zu sowas sagt man dann nicht "WebService"


----------

