Matlab using Java openStream(url) get :Java exception occurred: java.lang.​NullPointe​rException

Hi,
I want to download one file from a URL. According to this: http://www.mathworks.com/matlabcentral/newsreader/view_thread/294528. all works fine until i go to the line: is = jurl.openStream; This gave one error says Java exception occurred: java.lang.NullPointerException.
Anyone can help? thanks

12 comentarios

buer - what happens on the previous line
jurl = java.net.URL(linki);
What is linki? Is it a valid URL? I ran the code with a couple of test URLs and was able to download each without any problems.
Hi, the only thing is my URL is few parts and the file name is not in the URL...so I have to define the name again myself...
Company='Abc';
Depar='Fin';
url1='com/';;
url2='/download_h5_Depar=';
url3='.h5' ;
url=strcat(url1,Company,url2,Depar,url3);
links=url;
% copy files to local folder
[pathstr, name, ext ] = fileparts(links);
% name changed here
name=strcat(Company,'-',Depar);
Here you can see....now I am suspect about the security of the website....it needs to be in exact network domain with username and passpord for login...so i am not sure if this matters....
Have you verified that the link that you build, linki, is valid? i.e. can you copy and paste it into your browser and view the file?
As for needing a username and password, that could be the problem...
buer
buer el 24 de Nov. de 2014
Editada: buer el 24 de Nov. de 2014
Yes..I did try copy and paste the link, it works perfectly... but when it goes to the program itself, it does nto work...I also think it is most paobabaly the login problem..Do you know how can I solve this log in problem? Thanks
Do you know how can I solve this log in problem? Thanks
An alternative to this code may be to use webread or urlread. The first function can be used if you have R2014b. Both seem to allow for username and passwords. See also http://www.mathworks.com/matlabcentral/answers/161160-urlread-vs-view-source-need-view-source-data which may be useful.
Thanks Geoff, unfortunately I have only R2013b.... any possible way to do it? I am ´sure I can ´not get R2014b,I am using school Matlab....Thanks...
You may be able to urlread...it should be a function that your version of MATLAB has.
Hi Geoff,
I tried with urlread....
url2=urlread(links, 'Authentication','basic','Username','Myname','Password','Myword');
It gives me such errors all the time:
Error using urlreadwrite (line 91)
The IP address of "HostName" could not be determined.
Error in urlread (line 36)
[s,status] =
urlreadwrite(mfilename,catchErrors,url,varargin{:});
Can you help me with this? Is it possible to add the authentication inside the code I post in the link? Thanks in advance...
Hi Buer - have you verified that links is valid?
Hi Groff.
This is the answer...thanks a lot.
Buer - good that you figured it out. Could you summarize it as an answer below?

Iniciar sesión para comentar.

 Respuesta aceptada

Yes. so the answer is Matlab urlread does not support authentication with lower level request. So we need to code firectly against the Java URL class to use them:
% Matlab's urlread() doesn't do HTTP Request params, so work directly with Java
jUrl = java.net.URL(url);
conn = jUrl.openConnection();
conn.setRequestProperty('Authorization', ['Basic ' base64encode([user ':' password])]);
conn.connect();
info.status = conn.getResponseCode();
info.errMsg = char(readstream(conn.getErrorStream()));
s = readstream(conn.getInputStream());
function out = base64encode(str)
% Uses Sun-specific class, but we know that is the JVM Matlab ships with
encoder = sun.misc.BASE64Encoder();
out = char(encoder.encode(java.lang.String(str).getBytes()));
function out = readstream(inStream)
%READSTREAM Read all bytes from stream to uint8
try
import com.mathworks.mlwidgets.io.InterruptibleStreamCopier;
byteStream = java.io.ByteArrayOutputStream();
isc = InterruptibleStreamCopier.getInterruptibleStreamCopier();
isc.copyStream(inStream, byteStream);
inStream.close();
byteStream.close();
out = typecast(byteStream.toByteArray', 'uint8'); %'
catch err
out = []; %HACK: quash
end
Hope it will help others later.

Más respuestas (0)

Categorías

Más información sobre Introduction to Installation and Licensing en Centro de ayuda y File Exchange.

Preguntada:

el 20 de Nov. de 2014

Respondida:

el 17 de Dic. de 2014

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by