IT이야기

java.net.기형식URLException: 프로토콜 없음

cyworld 2022. 5. 19. 22:41
반응형

java.net.기형식URLException: 프로토콜 없음

다음과 같은 Java 예외를 받고 있다.

java.net.MalformedURLException: no protocol

내 프로그램에서 다음을 사용하여 XML 문자열을 구문 분석하려고 함:

Document dom;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
dom = db.parse(xml);

XML 문자열:

String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+
    "   <s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"+
    "       <s:Header>"+
    "           <ActivityId CorrelationId=\"15424263-3c01-4709-bec3-740d1ab15a38\" xmlns=\"http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics\">50d69ff9-8cf3-4c20-afe5-63a9047348ad</ActivityId>"+
    "           <clalLog_CorrelationId xmlns=\"http://clalbit.co.il/clallog\">eb791540-ad6d-48a3-914d-d74f57d88179</clalLog_CorrelationId>"+
    "       </s:Header>"+
    "       <s:Body>"+
    "           <ValidatePwdAndIPResponse xmlns=\"http://tempuri.org/\">"+
    "           <ValidatePwdAndIPResult xmlns:a=\"http://schemas.datacontract.org/2004/07/ClalBit.ClalnetMediator.Contracts\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">"+
    "           <a:ErrorMessage>Valid User</a:ErrorMessage>"+
    "           <a:FullErrorMessage i:nil=\"true\" />"+
    "           <a:IsSuccess>true</a:IsSuccess>"+
    "           <a:SecurityToken>999993_310661843</a:SecurityToken>"+
    "           </ValidatePwdAndIPResult>"+
    "           </ValidatePwdAndIPResponse>"+
    "       </s:Body>\n"+
    "   </s:Envelope>\n";

무엇이 이 오류를 발생시키는지에 대한 제안이 있는가?

설명서가 도움이 될 수 있다: http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/parsers/DocumentBuilder.html

방법DocumentBuilder.parse(String)URI를 가져다가 열려고 한다.그 내용을 직접 주려면 그 내용을 줘야 한다.InputStream또는Reader, 예를 들어 aStringReader자바 표준 수준의 침입에 오신 것을 환영한다!

기본적으로 :

DocumentBuilder db = ...;
String xml = ...;
db.parse(new InputSource(new StringReader(xml)));

파일에서 XML을 읽는 경우File에 반대하다DocumentBuilder.parse().

참고로 이것은 자바에서 많이 마주치게 될 패턴이다.일반적으로 대부분의 API는 문자열보다 스트림에서 더 많이 작동한다.스트림을 사용하는 것은 잠재적으로 모든 콘텐츠가 동시에 메모리에 로드되어야 하는 것은 아니라는 것을 의미하는데, 이것은 좋은 생각이 될 수 있다!

대신 시도하십시오.db.parse(xml):

Document doc = db.parse(new InputSource(new StringReader(**xml**)));

참조URL: https://stackoverflow.com/questions/1706493/java-net-malformedurlexception-no-protocol

반응형