SAP PO의 Audit로그를 간단하게 보기위해 Directory API사용을 하려고하는데 'AdapterMessageMonitoringVi' WSDL파일을 사용할때 오류가 발생됩니다.
현상, 에러
Apache CXF 3.3.3버젼으로 사용시 아래와 같은 에러발생WSDLToJava Error: org.xml.sax.SAXParseException; schema_reference:
accessExternalSchema 속성으로 설정된 제한으로 인해 'http' 엑세스가 허용되지 않으므로 스키마 문서 'ws-addr.xsd' 읽기를 실패했습니다.
해결과정
1. $JAVA_HOME/jre/lib나 lib 경로에 jaxp.properties파일없으면 생성하여 javax.xml.accessExternalSchema=all이나 javax.xml.accessExternalDTD=all를 추가했을때 해결이 안됩니다.2. IDE설정이나 톰켓설정의 'Open launch configuration' VM매개변수에 -Djavax.xml.accessExternalSchema=all 추가시에도 해결이 안됩니다.
3. CMD창에서 C:apache-cxf-3.3.3in>wsdl2java -d <자바파일이 생성될 루트디렉토리경로> -p <패키지명> -client
configuration key 'class.resource.loader.class' has been deprecated in favor of 'resource.loader.class.class'
4. CXF release 3.3.4버젼에서 정상실행되었다는 내용이 있어서 3.4.3버젼에서 다시 실행보니 정상적으로 자바파일이 생성됐습니다.
테스트
Client소스를 활용하여 SAP PO의 Audit로그를 간단하게 조회할수 있는 소스를 작성하고 실행하니 아래와 같은 에러가 발생되었습니다.
javax.xml.ws.soap.SOAPFaultException: Fault string, and possibly fault code, not set] with root cause
java.lang.NullPointerException
at org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit.setupConnection(AsyncHTTPConduit.java:142)
해당에러에 대한 원인을 찾지못하여 샘플코드를 작성하여 실행을 해보니 WSDL파일을 접근하는 부분에 무슨 문제가 있는 것같고 파일안에
/AdapterMessageMonitoring/basic?wsdl=binding&style=document&mode=ws_policy URLㅔ서 ws_policy를 삭제해주고 호출URL를 가져오기위해 WSDL파일 경로를 다시 지정해주니 정상적으로 호출이 되어 데이터도 잘 가져오는군요.
ws_policy가 뜻하는 건 잘 모르겠지만 정상적으로 작동하는 걸 보니 그동안 에러원인 찾는라 고생한걸 보상받는 느낌인것 같습니다.
끝까지 봐주셔서 감사합니다.
댓글 없음:
댓글 쓰기