[Java Axis] Send file to client.

Pagina: 1
Acties:

  • Bbfreak
  • Registratie: September 2002
  • Laatst online: 04-02 10:03
Ik ben bezig om een webservice te maken mbv Axis.
Een simpele calculator lukt me wel maar wat ik nu wil niet.
De client doet een aanvraag bij een webservice met een filename als String.
Vervolgens stuurt de service het gevraagde bestand terug.

Wat heb ik nu?

Service:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
import javax.activation.DataHandler; 
import javax.activation.FileDataSource;
import java.io.File;

public class AttachmentService {

    public DataHandler getDocument(String filename) throws Exception {      
        DataHandler dh = new DataHandler(new FileDataSource(new File(filename)));
        if (dh == null ) System.err.println("dhSource is null");
        return dh;
    }
}

Misschien dat ik het helemaal verkeerd zit maar kon er niet veel voer vinden.
Dit is btw gebaseerd op: http://www.possibility.co...jsp?page=SimpleAxisServer.
Bij het compileren van de webservice als ik de java file deploy in de axis webapp is:
code:
1
2
3
4
5
6
7
8
9
10
11
- Exception:
AxisFault
 faultCode: {http://xml.apache.org/axis/}Server.compileError
 faultSubcode: 
 faultString: Error while compiling:  D:\Program Files\Tomcat 5.5\webapps\axis\WEB-INF\jwsClasses\AttachmentService.java
 faultActor: 
 faultNode: 
 faultDetail: 
    {}Errors:Error compiling D:\Program Files\Tomcat 5.5\webapps\axis\WEB-INF\jwsClasses\AttachmentService.java:
Line 1, column 0:  'class' or 'interface' expected
Line 1, column 3:  illegal character: \190


Wie kan mij in de goede richting duwen?
Het endpoint is goed gedefinieerd maar hier niet opgenomen.

Twitter @cmeerbeek / Halo Waypoint Profile


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Er staat waarschijnlijk meer in AttachmentService.java dan je hierboven neergezet hebt.
code:
1
Line 1, column 0:  'class' or 'interface' expected
Je bestand begint niet goed. Deze fout krijg je bijvoorbeeld als je import met een hoofdletter schrijft. Ik weet alleen niet wat kolom 0 is. Normaal begint een compiler bij 1 te tellen.
code:
1
Line 1, column 3:  illegal character: \190
Er staat een vreemd karakter in je code. Bv float f = ¾;. Volgens mij is \190 een ˆ.

Open
D:\Program Files\Tomcat 5.5\webapps\axis\WEB-INF\jwsClasses\AttachmentService.java
eens in een tekst-editor. Waarschijnlijk staat er gewoon een hoop rotzooi in.

[ Voor 4% gewijzigd door Daos op 30-11-2005 18:11 . Reden: \190 kan natuurlijk geen octaal getal zijn omdat die cijfertjes heeft van 0 tot 7. ]


  • Bbfreak
  • Registratie: September 2002
  • Laatst online: 04-02 10:03
Het probleem hierboven is opgelost maar nu is er een ander probleem.

De service wordt als volgt aangeroepen:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
String endpoint = "http://pc8/axis/AttachmentService.jws";
DataHandler dhSource = new DataHandler(new FileDataSource(new File("")));
Service  service = new Service();
Call     call    = (Call) service.createCall();
String filename  = "C:\\SiteScope\\logs\\GoogleImg.log";

call.setTargetEndpointAddress( new java.net.URL(endpoint) );
call.setOperationName( "getDocument" );         
QName qnameAttachment = new QName(endpoint, "AttachmentService");
call.registerTypeMapping(dhSource.getClass(),qnameAttachment,AFDataHandlerSerializerFactory.class,JAFDataHandlerDeserializerFactory.class);
call.addParameter("filename", XMLType.XSD_STRING,ParameterMode.IN);
call.setReturnType(qnameAttachment);
            
LogManager.log("RunMonitor", "Invoke call!");
Object ret = call.invoke(new Object[]{
   filename
}
);
LogManager.log("RunMonitor", "Made call to " + getProperty(pServerURL));


Invoke Call wordt nog gelogd maar daarna krijg ik een foutmelding:
code:
1
Error: org.xml.sax.SAXParseException: Document root element is missing.

Dit vind ik raar want de XML, WSDL is gegenereerd door Axis.
De Java klasse is nog steeds zoals in de SP.

[edit]
Ik heb het idee dat er een fout in mijn QName zit.
De namespace staat volgens de WSDL goed maar wat is "localPart"?
Kan ik die in de WSDL vinden of is hij zo goed?

[edit 2]
Ik heb het nu met een deploy.wsdd gedaan:
XML:
1
2
3
4
5
6
7
8
9
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
            xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

 <service name="MyService" provider="java:RPC">
  <parameter name="className" value="AttachmentService"/>
  <parameter name="allowedMethods" value="*"/>
 </service>

</deployment>

URL http://pc8/axis/services/MyService kan worden aangeroepen
maar ik krijg nog steeds de Document root element is missing errort.

[edit 3]
Voorlopig een andere oplossing gevonden.
De service geeft een URL terug waar ik het bestand kan downloaden.
Vervolgens download de client deze via een URL connectie.

[ Voor 52% gewijzigd door Bbfreak op 06-12-2005 14:10 ]

Twitter @cmeerbeek / Halo Waypoint Profile