Content-length in HTTP Post request
Hi all,
I have a problem with a Http request. I send data in a POST to a servlet, but the KVM doesn't set the Content-Length correctly. How can I do ?
The code :
conn = (HttpConnection) Connector.open(m_strServer);
conn.setRequestMethod(HttpConnection.POST);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
String requestData = "from=" + m_strOriginator + "&to=" + m_strDestinator + "&message=" + m_strMessage;
out = conn.openDataOutputStream();
out.write(requestData.getBytes());
out.flush();
in = conn.openDataInputStream();
if (conn.getResponseCode() == 200)
response = true;the request sended :
POST /my_directory/test.xml HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunked
Host: my_pc
15
from=8&to=9&message=J
0
I think that the KVM doesn't put "Content-Length:" before "15".
Perhaps it's a bug.
St�phane
Maby u try to force it with:
conn.setRequestProperty ( "Content-Length" ,
Integer.toString (requestData.getBytes()));
for me it does also not work...but u never know
lemme know if it works
Fabian
Similar Messages
-
HTTP POST Request with XML file in
Hi @ all,
I would like to send an HTTP Request with an XML File in the body to an SAP System
I have the target URL and the a XML File.
Now the question is. Is it possible to use something like the HTTP_POST FuBa to send an url post request with an xml file?
If yes can anybody give me a hint?
I have a php script which exactly do this coding. But to integrate it all in one system it is necessary to transform it into ABAP and call it there.
// compose url and request and call send function
function test($productID, $categoryID) {
// create url
$PIhost = "XXX.wdf.sap.corp";
$PIport = "50080";
$PIurl = "/sap/xi/adapter_plain";
$PIurl .= "?sap-client=800";
$PIurl .= "&service=XXX";
$PIurl .= "&namespace=XXX";
$PIurl .= "&interface=Frontend_Interface";
$PIurl .= "&qos=EO";
$PIurl .= "&sap-user=XXX";
$PIurl .= "&sap-password=XXX";
// create xml
$request = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
$request .="<n1:FrontendInbound_MessageType xmlns:n1=\"http://crmpiebay.com\">\n";
$request .= "\t<FrontendInbound>\n";
$request .= "\t\t<ProductName/>\n";
$request .= "\t\t<ProductCategory>".$categoryID."</ProductCategory>\n";
$request .= "\t\t<ProductID>".$productID."</ProductID>\n";
$request .= "\t\t<MessageID/>\n";
$request .= "\t</FrontendInbound>\n";
$request .= "</n1:FrontendInbound_MessageType>";
// send http request
postToHost($PIhost, $PIport, $PIurl, $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"]."/".$_SERVER["PHP_SELF"], $request);
// send post request to PI server
function postToHost($host, $port, $path, $referer, $data_to_send) {
$fp = fsockopen($host, $port);
if($fp) {
$res="";
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Referer: $referer\r\n");
fputs($fp, "Content-type: text/plain\r\n");
fputs($fp, "Content-length: ". strlen($data_to_send) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data_to_send);
while(!feof($fp)) {
$res .= fgets($fp, 128);
fclose($fp);
return $res;
Would be great if anybody could give me a hint how to solve such a HTTP Post request with XML body data.
Thanks in advance.
Chris
Edited by: Christian Kuehne on Feb 26, 2009 4:32 PMhi friend could you please share your solution regarding this query if u got it already?
-
Query regarding sending XML over HTTP Post request
Hello,
I am trying to send XML data from a server to client via HTTP Post request
And vice versa � receive the data by a client
Assume that the xml data looks something like
<?xml+version="1.0"?>
So my post query will look like
http://<IP Address>:<port>/
POST /MessageReceiver.jsp HTTP/1.0
Host: www.SomeHost.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 38
%3C%3Fxml%2Bversion%3D%221.0%22%3F%3E+
This information will be received by the client and converted back to xml data.
My query is - is there some library/open-source stuff that
does the process of transcoding the entity's non-ASCII characters
at the server side
and decoding the URL back to human-readable form at the client side?
i.e. I need a simple mechanism to convert
<?xml+version="1.0"?>
to
%3C%3Fxml%2Bversion%3D%221.0%22%3F%3E+
at the server side, while sending data
and do the opposite at the client side to get the xml back.
Also could some one confirm if JTidy is a right tool to check if the xml is well-formed?
Or is there any other standard tool that checks for well-formed properties of xml?
regards,
Deepak.java.net.URLEncoder / URLDecoder?
Also could some one confirm if JTidy is a right tool to check if the xml is well-formed?No, it's for parsing HTML. An XML parser is checking for well-formedness in any case. -
Retrieve data/files fro HTTP POST request in On-Demand process
Hello,
I would like to integrate https://github.com/blueimp/jQuery-File-Upload to my APEX 4.2 application inside XE11g. I would like to use this kind of jQuery component, multiple file upload, use Drag & Drop, image resize, size limit, filter extensions etc...
This jQuery component and also others javascript uploaders sends data files to some defined URL. Developer need to build some servlet, php script or something on server side that will read files from HTTP request and stores it somewhere.
Do you know how to do it in APEX? How can I read data from HTTP POST request in PL/SQL? Now I can only call my On-Demand application process from javascript, but I am not able to read any data from HTTP POST in it.
Can I do it in APEX, or using MOD_PLSQL?
I would like to implement this:
1) some javascript uploader will call some URL of my application and sends HTTP POST with data files
2) I will read data files from HTTP POST and store them into database
3) I will create some HTTP response for javascript uploader
Thank you for some tipsI know about that existing plugin " Item Plugin - Multiple File Upload"
But I doesn't work in IE and has only basic features. Licence for commercial use is also needed. I would like to use some existing jQuery plugin. There are many of these plugins with nice features. And only one problem is that I need to create some server side process/servlet/script.. that can recieve HTTP request, get files from it and stores them into DB. -
Extract Portal User Name From HTTP POST Request (WSRP SOAP)
How can we extract the user name from the HTTP POST Request (*WSRP SOAP*) from the Portal to the Portlet Provider (Producer)?
We are load balancing between the Portal (10.1.14.2) and the providers (OC4J 10.1.3.3) and would like to extract the user name within the load balancer so we can create session affinity based on it.
BTW, we already tried using TCP Flow but were unable to see the user name.From the documentation, it seems that you need to use
HttpURLConnection.setRequestMethod("POST"); // "GET" is the defaultalthough I have seen examples on the web without it.
Try!
Edit: Also the single quotes around userid and password may be a problem.
Use the previous poster suggestion, but do not include the single quotes.
Edited by: baftos on Aug 6, 2008 4:27 PM -
Content-Length missing in SOAP request
In Oracle Application Server, a SOAP request like :
POST /eai_esn/start.swe?SWEExtSource=WebService&SWEExtCmd=Execute&WSSoap=1 HTTP/1.1
SOAPAction: "document/http://siebel.com/marketing/import:MktgImportServiceInvokeImportJob"
User-Agent: Axis2
Host: 192.168.49.66:8093
Transfer-Encoding: chunked
Content-Type: text/xml; charset=UTF-8
a28
<?xml version='1.0' encoding='UTF-8'?>. . . . </soapenv:Envelope>
0
is rejected with an error like : "Missing body length ..."
However , a SOAP request like :
Content-Type: text/xml;charset=UTF-8
SOAPAction: "document/http://siebel.com/marketing/import:MktgImportServiceInvokeImportJob"
User-Agent: Jakarta Commons-HttpClient/3.1
Host: 192.168.49.58:8093
Content-Length: 2602
<?xml ...... >
is accepted with no error .
Using Microsoft IIS, the first SOAP request without the 'Content-Length' is accepted just fine.
It looks like OAS requires SOAP header to have a "Content-Length" . Is this correct ? Is there a way to change this behavior ?
Thank you
Gabriel GonzalezHi,
The web service we are trying to communicate with is a third-party service that we have no control over. This service requires the name of the attribute to be in the content id field.
See section 3.8 of the following link
http://www.ws-i.org/Profiles/AttachmentsProfile-1.0-2004-08-24.html
I seem to be able to set the name, description, contentType in the SOAP adapter module I have written - but I cannot set the content-Id.
Regards,
Bryan -
HTTP POST Request? How? Please Help!
Hi maybe this is a simple question. But I was able to do a GET Request from an applet to an ASP page just fine but I am having problems with the POST Request. How do you do a HTTP POST and put the parameter on the post data?
This is what I am doing:
url = new URL(queryParam);
connection = (HttpURLConnection)url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
// IS THIS CORRECT WAY TO ADD PARAMETER TO POST
connection.setRequestProperty("name","javaguy");
BufferedReader in = new BufferedReader( new InputStreamReader( connection.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();The setRequestProperty() method is used to add HTTP headers to the request. The way you pass "post" parameters is to send them as the body of the message in "application/x-www-form-urlencoded" form. In other words, create a string of URLEncoded "name=value" pairs delimited by '&', just like you would see in the URL when making a GET request through the browser:
String paramStr = "name=javaguy&occupation=web+developer" ;
byte[] paramBuf = paramStr.getBytes("ISO-8859-1") ;
url = new URL(queryParam);
connection = (HttpURLConnection)url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
// THIS CORRECT WAY TO ADD PARAMETER TO POST
connection.setRequestProperty("Content-Length", Integer.toString(paramBuf.length)) ;
OutputStream out = connection.getOutputStream() ;
out.write(paramBuf) ;
out.flush() ;
out.close() ;
BufferedReader in = new BufferedReader( new InputStreamReader( connection.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();Good luck! -
Missing Content-Length in HTTP response
Hi All,
I am experimenting with developing websevices using Sun Java Application Server. I have a working webservice using BEA Weblogic and I would like to have it ported to SUN. The application works like this: A client (Tuxedo application program) sends an XML document to the webservice, in response the websevice parse this document and based on certain fields it send back another document.
The problem is that the SUN application does not return the content-length in its response and hence the requesting client rejects the message. Can anyone help?? Below is the response from both SUN and Weblogic:
Weblogic
HTTP/1.1 200 OK
Date: Sat, 22 Oct 2005 11:42:53 GMT
Pragma: no-cache
Server: WebLogic Server 8.1 SP2 Fri Dec 5 15:01:51 PST 2003 316284 WebLogic Server 8.1 SP2 Fri Dec 5 15:01:51 PST 2003 316284 WebLogic Server 8.1 SP2 Fri Dec 5 15:01:51 PST 2003 316284 with CR174524
Content-Length: 2025
Content-Type: text/xml; charset=UTF-8
Expires: Thur, 01 Jan 1970 00:00:00 GMT
Cache-Control: no-cache
Connection: Close
<?xml version="1.0" encoding="utf-8"?>
<SOAP-ENV:Envelope
SUN
HTTP /1.1 200 OK
X-Powered-By: Servlet/2.4
SOAPAction: ""
Content-Type: text/xml;charset=utf-8
Date: Sat, 22 Oct 2005 11:42:53 GMT
Server: Sun-Java-System/Application-Server
Connection: close
<?xml version="1.0" encoding="UTF-8"?>
env:Envalope xmls:env="http://schemas.xmlsoap.org/soap/envelope/"
As can be seen the Content-Length is missing.
Thanks for your help.
RansfordIs there an option in Sun Java Application Server to include Content-Length in response to a client request? If not is it possible to generate this information from the service code?
Thanks. -
Query regarding encoding/decoding of XML over HTTP Post request
Hello,
I am working on a project where I need to put SMS inside XML and
eventually transfer this XML via HTTP post from/to server/client.
Assuming the SMS to be 7-bit text the XML may look something like
<?xml+version="1.0"?>
<SMS
TESTMESSAGE
</SMS>
This XML when encoded in a HTML post may look something like
http://<IP Address>:<port>/
POST /MessageReceiver.jsp HTTP/1.0
Host: www.SomeHost.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 90
xmlMsg=%3C%3Fxml+version%3D%221.0%22%3F%3E%0D%0A%3CSMS%0D%0A%09TESTMESSAGE0D%0A%3C%2FSMS%3E
This xml is UTF-8 (7-bit ASCII) by default since no encoding format has been specified.
My question - how will the encoding of xml change to - when 8 bit binary data
is transferred via xml.
for e.g.
<?xml+version="1.0"?>
<SMS
<!!!!!BINARY DATA!!!!!>
</SMS>
for such a file how/what shld the encoding be set to.
Further my spec-states the following.
"The content of the XML must respect the encoding. Thus a SMS
containing typically french characters must use ISO-8859-1 encoding"
"This code needs to work with both UTF-8 and UTF-16 standards (ASCII and Unicode). Because of this the parsing code should work internally with UTF-16 and translate up/down to/from UTF-8 (ASCII) only when dealing with the basic HTTP."
could anyone clarify this for me.The first thing you need to do is clear up some fundamental misconceptions about character encodings. UTF-8 is not the same thing as "7-bit ASCII", and UTF-16 is not the same as "Unicode". Anyway, you're making this a lot more difficult than it needs to be. Just use UTF-8 to encode and decode all messages; it can handle all the characters from any language you're likely to run into.
-
Suppose there is form in a web page and it submits data in HTTP POST method. After submitting the form, if I reload the page [either by the refresh button or back button; whichever applicable], firefox asks permission to resend the form data by saying "To display this page, Firefox must send information that will repeat any action...". Now if the user clicks on the resend, firefox resubmits the form data.
So where does firefox store this from data for such future resending/resubmission?
Is it possible to retrieve/manipulate those stored form data?I thought I'd tried that, as tried lots of other things like encoding URL, but obviously not as this works.
Thanks for the quick reply.
We also have an issue with the people results not being able to be refined by Department or Job Title now we have connected the SP2010 farm to use the service applications from a SP2013 farm.
Any ideas on this? I've started a new thread as its unrelated though:
http://social.technet.microsoft.com/Forums/sharepoint/en-US/c89d5463-4531-4a28-9586-1f690c7b580d/can-you-refine-people-search-results-using-a-sharepoint-2013-search-service-application-connected-in?forum=sharepointsearch -
How to insert document into xmltype column through an http post request with perl
Oracle 11.2.0.3
Windows server 2008r2
Apache tomcat 7.0
Oracle APEX 4.2.1
Oracle APEX Listener 2.0
I would like to insert a XML document into the database through an APEX restful web service. The POST into the web service in done with PERL. The following code will insert an empty record in a table with column of XMLType type.
Perl Code
use strict;
use warnings;
use LWP::UserAgent;
use HTTP:Headers;
my $headers = HTTP::Headers->new();
my $url = "http://host:port:apex/<application_workspace>/<restfull service module>/<uri template>/
my $sendthis = ('<?xml version="1.0" enconding="utf-8"?>
<students>
<row>
<name>Mark</name>
<age>30</age>
</row>
<./students>';)
$headers -> header('Content-Type' => 'text/xml; charset=utf-8');
my $request = HTTP:Request->new('POST', $url, $headers, $sendthis);
$request-> protocol('HTTP/1.1');
my $browser = LWP::UserAgent->new();
my $response = $browser->request($request);
my $gotthis= $response->content();
my $the_file_data = $response->content();
APEX restful service
Method: POST
Source type: PL/SQL
MIME Types allowed: blank
require secure access: none
source:
{declare
doc varchar2(32000);
begin
insert into table <column name>
values(doc);
commit;
end;
Table code
{ create table <tablename>
(column name XMLType>);
The above code will insert an empty column into the table.
Any ideas why?It's a really bad idea to assemble XML using strings and string concatenation in SQL or PL/SQL. First there is a 4K limit in SQL, and 32K limit in PL/SQL, which means you end up constructing the XML in chunks, adding uneccessary complications. 2nd you cannot confirm the XML is valid or well formed using external tools.
IMHO it makes much more sense to keep the XML content seperated from the SQL / PL/SQL code
When the XML can be stored a File System accessable from the database, The files can be loaded into the database using mechansims like BFILE.
In cases where the XML must be staged on a remote file system, the files can be loaded into the database using FTP or HTTP and in cases where this is not an option, SQLLDR.
-Mark -
Hi,
Flex3 Pro vs. J2EE
All HTTP requests with method=POST are received by server as
GET requests.
At first I thought the problem was with the app server -
WebLogic - but the same happens with Tomcat.
Any idea what could be causing this?
Thanks!!!Tracy,
By "sending name value pairs" did you mean object properties
and sending the object?
This works only when you know the property name in advance.
We have a generic function that gets all the values from the
controls and builds XML on the fly. This way you don't need to know
the property name in advance and it works on any screen/form.
Setting content type to "application/xml" did the trick for
us - but you put us on the right track.
Thanks! -
How to make a HTTP Post request to a remote server ?
Hi Guys,
I'm new to java technology. I've a small problem with my code. All i need is to send a request to the remote server whose control is not at all in my hands with the POST method, which includes few of the parameters along with one of them is a xml formatted variable. The result of this request is an xml generated out which i want to fetch in my jsp code. I've tried it with the HTTPUrlConnection method and code for the same is below :
<%
try {
String xmlString = "<FARES><AGENCY_ID>TFI</AGENCY_ID><DEP_CITY>NYC</DEP_CITY><ARR_CITY>LON</ARR_CITY><DEP_DATE>12</DEP_DATE><DEP_MONTH>DEC</DEP_MONTH><OWRT>RT</OWRT></FARES>";
URL url = new URL("http://www.lowestairprice.com/Canada/mars.asp?WCI=Start&WCE=XMLFARES&reqMsg=Yes&");
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setInstanceFollowRedirects(true);
con.setFollowRedirects(true);
con.setRequestMethod("POST");
con.setDoOutput(true);
out.println("Testing...");
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(con.getOutputStream()));
bw.write("xmltekst=" + xmlString);
bw.flush();
bw.close();
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
String line = br.readLine();
String result ="";
while (line !=null) {
result += line;
line = br.readLine();
br.close();
out.println("Resultat: " + result);
} catch(Exception exc) {
exc.printStackTrace();
out.println(exc);
%>
But when i run this on browser it gives me the following error.
java.net.MalformedURLException: unknown protocol: https
Now the response they provide is thrown back with the https protocol instead of the http. How can i fetch their response in my jsp code and store it in a local variable.
If anybody can help me out in this, i would be thankful for the same.
Thanking You,
Rgds,
Gaurav
(Software Engineer)
Ultra Infotech.Have you tried to use HttpsURLConnection instead ?
-
Can someone explain how to do this? I've checked the main Java site and it's got an example, but it uses MIDP code and I've got Java 5.0.
Regards
JohnnyThanks for that. But HttpURLConnection has a
protected constructor and I can't instantiate. What's
the correct way of using this?
I've been able to do this by directly connecting to
the server on port 80, but that's is obviously not
the best way to do this, is it?
Can you give me some example code for this. I've been
tearing my hair out trying to find a better way that
using the Socket class.
JohnnyCreate a class extending HttpURLConnection. That class is abstract anyway.
***Annie*** -
Truncated POST requests in IE 10 - In Response to NTLM Authentication
In Internet Explorer 10, the browser is incorrectly truncating HTTP POST requests and submitting unsolicited NTLM negotiate headers with a HTTP Content-Length of Zero Bytes. This results in HTTP POST parameters failing to be submitted to the
server.
Assume the following web application with a context root of:
https://w3.someapplication.net/webapplication/
Secure cookies for this site are established at the context root of this application.
To reproduce this issue, a secure session is established at a protection space deeper than the root context of the web app:
https://w3.someapplication.net/webapplication/secure/login
After establishing a secure session with the web application, some client side artifacts are retrieved from a web proxy at a higher protection space:
https://w3.someapplication.net/webapplication/somejs.js
Subsequent HTTP POST requests to a deeper protection space will result in IE incorrectly attempting to pass an unsolicited NTLM negotiate header to the server side, and the HTTP POST request will be truncated with a Zero Content-Length header:
https://w3.someapplicaiton.net/webapplication/submit/form
The result is that the HTTP POST parameters submitted to the last URL will be lost.
This is reproducible against IE6 and IE10. It does not reproduce against IE8, or any non-Microsoft browser which all behave in a sane manner.
My Questions:
Why is IE behaving this way?
What can I do to make IE behave properly? Please don't suggest that I change the entire structure of my company's website to overcome this kind of silly bug in IE.
Is there a planned fix to correct this behavior back to the proper implementation observed in IE8?
Additional details about this problem are documented by an IE Internals blogger at the following url:
http://blogs.msdn.com/b/ieinternals/archive/2010/11/22/internet-explorer-post-bodies-are-zero-bytes-in-length-when-authentication-challenges-are-expected.aspx
MichaelYes, I have read that blog post in detail. All of the comments from Microsoft on this issue suggest making intrusive changes to the web application side to work around this "optimization". This is not an acceptable answer. This
is clearly a bug in IE. Evidence to support that this is a bug is that the behavior within IE's own browsers is not consistent; IE6 and IE10 will reproduce this issue, IE7 and IE8 will not.
I don't understand your suggestion; "ensure all paths are configured to require authentication". This is not a reasonable expectation for any normal web app. Our application does require authentication on all paths. However, when the first
authentication request goes through, a HTTP Session is established. Any subsequent request to that domain will not and should not be re-authenticated. IE making assumptions about the authentication requirements of a server side application is incorrect.
Further, even if i did re-challenge the browser for credentials on every path, regardless of whether a session is established or not, how would I handle the requirement to serve client side artifacts from a web proxy within that secure domain? Am I expected
to force my web proxy to require an NTLM header to serve up a CSS file? That is just silly.
You also suggested that my application might be incorrectly returning a 401. I can assure you, that is not the case. The flow is this:
Perform a signon to the application and retrieve some client side artifacts required by the splash page
https://w3.myapp.com/some/app/path?query=string
401 + www-negotiate response header
https://w3.myapp.com/some/app/path?query=string
browser provides a ntlm token, user is logged in, session is started
https://w3.myapp.com/some/file.js 200 response code, no challenge from the server side
Splash page is loaded; user submits a POST request
https://w3.myapp.com/some/app/path POST request fails because IE truncates the request and attaches an NTLM negotiate header with Zero Byte content length. This is an unsolicited negotiate header from IE.
Honestly, it really irritates me when people suggest we should change our entire application structure to accommodate IE bugs or "features" that are completely outside of the HTTP spec. I understand RFC4559 states that a browser MAY initiate a request
to a server which includes an unsolicited negotiate header, but it doesn't say anything about truncating the contents of that request.
No other browsers exhibit this behavior, and even the behavior within Microsoft's own product is not consistent. It is insanely frustrating as a web developer trying to deal with all of IE's little nuances.
Is there anyway this can be turned off via a registry entry? Is there any plan to fix this in a future release?
Maybe you are looking for
-
Calling DB2 Stored Proc from Oracle DB
Hi, I am having two different database running (One is oracle on solaris while the other one is db2 on os/390 mainframe) i want to pass the data realtime. Is there any way I can call a DB2 stored procedure from oracle directly. If anyboy can help in
-
Export file to PDF - where is the"background activity" in InDesign CS6?
Export file to PDF - where is the "background activity" in InDesign CS6? i´ve been told that I can solve the problem by clicking in to "background activity", but I cant even find it? Where is it? I have never ever had this problem, and I cant do my w
-
Help with iTunes and an external hard drive please
I have an external hard drive that I like to store my music on since I usually have a good deal of it. Anyone know the best way to do this? Cause what I have done in the past is set iTunes to monitor the folder on the ext hd where my music is. But it
-
When using the oracle.dss.graph.Graph in a swing JPanel, the method graph1.setSeriesRolloverBehavior(GraphConstants.RB_HIGHLIGHT); doesn't seem to work. Is there a trick to this? will it only work in a web page opposed to running it standalone swing
-
Installing Office for Mac 2008
I have the opportunity through work to purchase a full download of the above for a very cheap price. I currently have Office for Mac 2004 installed. Questions : 1. Should I uninstall my current version or install over the top ? 2. Does 2008 run nativ