Avatar billede peterdamgaard Nybegynder
27. juni 2008 - 20:12 Der er 9 kommentarer og
1 løsning

java xml til asp webside (pointgivende)

Hej (Jeg kom til at oprette dette spørgsmål med en konto jeg lukker, så det er dette spørgsmål jeg giver point for)

Jeg har prøvet at søge efter svar på det her selv, men jeg er ikke helt sikker på hva' jeg skal søge efter

Mit problem:
Jeg har et javaprogram som laver en xml fil med data, som jeg skal have sendt videre til en asp side, som ligger online.
Hvordan jeg forbinder og sender xml filen fra java programmet til asp siden? så havde jeg tænkt at jeg skulle lave noget asp kode til at tage imod denne xml-fil og sætte den ind i en database. Jeg er dog ikke helt klar over om dette er den rigtige vej at gå, jeg er åben for forslag. Jeg vil undgå at man skal ind på selve websiden og uploade xml-filen.

På forhånd tak for hjælpen
Venlig hilsen
Peter
Avatar billede arne_v Ekspert
27. juni 2008 - 20:23 #1
Lav en HTTP POST med HttpURLConnection paa Java siden.

Jeg har eksempler paa HTTP POST paa lageret. Men jeg kan bixe et specifikt eksempel
engang i weekenden.

PS: Husk lige at luk det andet spoergsmaal.
Avatar billede peterdamgaard Nybegynder
28. juni 2008 - 13:10 #2
hmmm, det glemte jeg - nu er kontoen jo lukket

Jeg er bare lidt i tvivl om hvordan jeg får fat i argumentet i asp når jeg har sendt fra java
Avatar billede arne_v Ekspert
29. juni 2008 - 04:00 #3
package june;

import java.io.PrintStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class XmlUploadString {
    private static void uploadString(String urlstr, String xmlstr) {
        try {
            URL url = new URL(urlstr);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("POST");
            con.setDoOutput(true);
            PrintStream ps = new PrintStream(con.getOutputStream(), true, "ISO-8859-1");
            ps.print(xmlstr);
            ps.close();
            con.connect();
            if (con.getResponseCode() == HttpURLConnection.HTTP_OK) {
                System.out.println("OK");
            } else {
                System.out.println("Error: " + con.getResponseMessage());
            }
            con.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        uploadString("http://localhost/uploadstr.asp", "<all>\r\n<one>A</one>\r\n<one>BB</one>\r\n<one>CCC</one>\r\n</all>");
    }
}
Avatar billede arne_v Ekspert
29. juni 2008 - 04:01 #4
<%
option explicit

Function B2S(b)
    Dim i,s
    For i = 1 To LenB(b)
        s = s & Chr(AscB(MidB(b, i, 1)))
    Next
    B2S = s
End Function

Dim data,fso,tf
data = Request.BinaryRead(Request.TotalBytes)
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set tf = fso.CreateTextFile("C:\Inetpub\wwwroot\upload\z1.xml", true)
tf.Write B2S(data)
tf.Close
Set tf = Nothing
Set fso = Nothing
%>
Avatar billede arne_v Ekspert
29. juni 2008 - 04:01 #5
package june;

import java.net.HttpURLConnection;
import java.net.URL;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class XmlUploadDocument {
    private static void uploadDocument(String urlstr, Document doc) {
        try {
            URL url = new URL(urlstr);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("POST");
            con.setDoOutput(true);
            OutputFormat fmt = new OutputFormat();
            fmt.setIndenting(true);
            fmt.setEncoding("ISO-8859-1");
            XMLSerializer ser = new XMLSerializer(con.getOutputStream(), fmt);
            ser.serialize(doc);
            con.connect();
            if (con.getResponseCode() == HttpURLConnection.HTTP_OK) {
                System.out.println("OK");
            } else {
                System.out.println("Error: " + con.getResponseMessage());
            }
            con.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.newDocument();
        Element all = doc.createElement("all");
        doc.appendChild(all);
        Element one1 = doc.createElement("one");
        one1.appendChild(doc.createTextNode("A"));
        all.appendChild(one1);
        Element one2 = doc.createElement("one");
        one2.appendChild(doc.createTextNode("BB"));
        all.appendChild(one2);
        Element one3 = doc.createElement("one");
        one3.appendChild(doc.createTextNode("CCC"));
        all.appendChild(one3);
        uploadDocument("http://localhost/uploaddoc.asp", doc);
    }
}
Avatar billede arne_v Ekspert
29. juni 2008 - 04:01 #6
<%
option explicit

Function B2S(b)
    Dim i,s
    For i = 1 To LenB(b)
        s = s & Chr(AscB(MidB(b, i, 1)))
    Next
    B2S = s
End Function

Dim data,doc
data = Request.BinaryRead(Request.TotalBytes)
Set doc = Server.CreateObject("Microsoft.XMLDOM")
doc.Async = False
doc.LoadXML(B2S(data))
doc.Save("C:\Inetpub\wwwroot\upload\z2.xml")
Set doc = Nothing
%>
Avatar billede arne_v Ekspert
29. juni 2008 - 04:01 #7
Og et svar
Avatar billede peterdamgaard Nybegynder
29. juni 2008 - 19:43 #8
Mange tak - det virkede. Jeg var dog nødt til at slette 'option explicit', ved ikke helt hvorfor den brokkede sig over det, men det virker fint.

Jeg skal også have login og password argument med til at logge ind i databasen med. (Jeg er godt klar over at jeg skal have det krypteret på en eller anden måde, men det er et senere problem) Men hvordan får jeg givet dem med? jeg har prøvet bare at skrive dem i print kaldet:
ps.print("?login=xxx&password=yyy")
og så bruge:
Response.Write("Login: " & Request.QueryString("login") & ", Password: " & Request.QueryString("password"))
på asp delen, men det virker ikke rigtigt - jeg får det skrevet i filen, men jeg får ikke noget tilbage til java programmet, hvor jeg tager imod input på følgende måde:
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String input;
StringBuffer response = new StringBuffer(256);
while((input = in.readLine()) != null) {
    response.append(input + "\r");
}
System.out.print("Server: " + response.toString());

Er der et eller andet jeg har misforstået helt?
Avatar billede arne_v Ekspert
29. juni 2008 - 20:09 #9
Jeg ville ihvertfald lave det på en anden måde:

            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("POST");
            con.setRequestProperty("fnm", "z1.xml"); // <-------------------
            con.setDoOutput(true);

og så fiske den ud i ASP med:

Request.ServerVariables("HTTP_" & "fnm")

Jeg har så leget med at sende filnavn med - du kan selvfølgelig sende brugernavn og
password med på samme måde.
Avatar billede peterdamgaard Nybegynder
29. juni 2008 - 23:07 #10
Mange tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester