xml 6

적용되지 않는 xalan

XSLT를 이용하여 XML문서 변환을 하려고 xalan을 이용할 수 있다. 그런데 희한하게도 이 xalan이 적용이 되지를 않는다. 그렇다고 특정 Class가 존재하지 않는 것도 아니다. JDK 버젼에 따라 다를 수 있는데, 1.4.x 이상 부터는 xalan가 rt.jar에 포함되어 있다. xalan의 버그패치나, 신 기능을 사용할 것이 아니라면 xalan을 따로 가지고 다닐 필요가 없다는 말이다. 혹시라도 최신 xalan을 사용하려면 endorsed에 집어 넣는 법을 사용해야겠다.

IT한 것/xml 2007.04.11

factory.createService 에서 Connot find service

위와 같은 메시지만을 보아도 확신을 가져야한다. 서비스를 찾을 수 없다는 말이다. 서비스는 Target namespace와 service name으로 찾는다. 이 두가지 값이 키가 되기 때문에 한글자라도 다른 것이 아닌가 확인해야한다. 그렇다면 뭐랑 비교 확인해야하는가? WSDL문서의 /wsdl:definitions/@targetNamespace, /wsdl:definitions/wsdl:service/@name 이다. 역시, 아무런 지식없이 시작하면 이런 간단한 것 조차 시간을 잡아먹는 요소가 된다.

Java XML 파서 변경하기

Java에는 XML 파서가 내장되어 있다. Crimson 파서가 그녀석인데, 성능이 별로 안좋은지, 대부분 다른 것을 사용한다. 그렇다면 다른 파서로 변경은 어떻게 해야할까? WAS나 AXIS 같은 애들은 알아서 셋팅을 해주는 것 처럼 보인다. 대체 어떻게 해먹는지 몰라서 ${JAVA_HOME}/jre/lib/endorsed 에 다른 파서를 강제로 넣어주었다. 그런데 나는 이런방법을 무지 싫어한다. 고로 다른 방법을 찾던중 오늘 실마리를 잡아 해결였다. 우선은 Manifest 라는 녀석에 대해서 알고 있어야한다. 잘 알 필요는 없고, 이 녀석에 의해서 기본 파서를 변경할 수 있고, 그 방법만 알면 된다. 보통 jar 로 패키징한 녀석을 풀어보면 META-INF 라는 디렉토리가 생긴다. 여기에 들어가는 정..

IT한 것/xml 2007.03.23

직접 정의된 네임스페이스와 접두어를 가진 엘리먼트의 XPATH 검색

[code] XecureWSS Encryption Sample testing [/code] 위의 XML을 대상으로 중간에 echoStringResponse를 검색하는 방법을 생각해보자. 가장 간단히 생각한 것이 //ns1:echoStringResponse 너무 간단하다. 그러나 검색기를 돌려보면 그런 네임스페이스 접두어는 선언되지 않았다고 내뱉을 것이다. 내가 네임스페이스의 scope에 대해서 제대로 이해하고 있는 것이 아닌지 의심스럽다. 아마도 직접 정의한(네임스페이스가 적용되는 엘리먼트에서 정의한) 네임스페이스의 접두어는 외부에서 찾을 수 없는 것이 아닌가 한다. 현재 확인해본 검색기는. XML SPY 2006, oXygen 8.1, xerces(버젼이 기억안난다.) 이다.. 모두 모두 못찾겠다고 한..

IT한 것/xml 2007.03.09

AXIS에서 닫기태그(end-tag)가 사라질때

분명히 핸들러에서는 정상적인 메시지를 보냈음을 확인하고 return 했는데 SOAPMonitor를 보면 수십바이트의 데이터가 누락되어 닫기태그가 없다는 오류가 발생한다. 한참을 방황하다가 숫자놀이를 시작했는데, 누락된 데이터의 길이가 xml헤더의 길이와 일치하는 것이 아닌가? 그리하여 SOAPPart 객체에 setContent를 사용하는 방법에 문제가 있는 것이 아닌가를 확인하였고 원래 만들어두었던 DOMSource(Document)를 사용하던 방법을 사용하지 않고 StreamSource( InputStream )을 사용하여 Source를 만들었다. 그 결과 메지지가 누락되는 일은 발생하지 않았는데, 예상치 못하게 서버에서 정확한 응답을 해 주었다. 서버에는 변경된 소스를 적용하지 않았는데도 말이다. 일..

libxml xmlGetNsList 후 xmlFreeNsList

절대로 안된다. 다행히 libxml은 소스가 있어서 확인해 봤는데. xmlGetNsList를 하면 내부에서 메모리를 할당한다. 이것까지는 좋은데, namespace를 복사하지 않고, 그 포인터를 할당한 위치에 적재시킨다. 다시말하자면, 껍데기만 만들고 알맹이는 딴 넘을 가져오는거다. 그래서 멋 모르고 xmlFreeNsList로 해체시키면 원본 xmlDoc 객체의 namsepace가 날아간다. 그럼 바로 xmlDoc 객체를 해체시킬때에 문제가 발생한다. 아이. 자증나.. 그렇지만, xmlFree 로 해제시키니 별 문제 없었다.

IT한 것/xml 2006.11.01