2016-12-22 3 views
0

비누 웹 서비스의 문제점을 해결하는 가장 좋은 방법을 찾고 있습니다. 해결해야 할 문제는 Apache Axis가 주어진 WSDL 파일을 사용하여 생성 한 프록시를 wsdl2java 명령을 사용하는 Apache CXF genereta의 프록시로 대체하는 것입니다. 클래스 필드로Apache CXF WSDL 스키마 구문 분석 xsd : 모든 유형

@XmlAnyElement(lax = true) 
    protected List<Object> any; 

요소 : 나는 CXF와 프록시를 생성 IDE의 클래스를 열 때 는 그러나, 나는 내가 가지고있는 것을 깨달았다. 이것은 이상했다. 순수한 wsdl을보고 complextype 속성 중 하나에 xsd:any 요소가 있습니다. 나는 오랜 시간 동안 무엇이 문제인지 그리고 그것을 해결하기위한 최선의 해결책을 찾고 있었다. 나는 this을 발견했다. 그것은 아파치 CXF 런타임 요소의 실제 데이터 형식을 확인할 수없는 것 같습니다. 따라서 DOM 파서를 사용하여 수동으로 구문 분석해야합니다.

private org.apache.axis.message.MessageElement[] _any; 

태그 :

<any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded" /> 

내 질문은 :이 문제를 해결하는 가장 좋은 방법은 무엇입니까

아파치 축은 다음을 생성? DOM 파서가 정말로 필요합니까? 내가 그리워하는 게 있니? 감사합니다.

답변

1

<xsd:any>은 스키마에서 모든 요소를 ​​허용하는 데 사용됩니다. this link

요소를 사용하면 스키마에서 지정하지 않은 요소로 XML 문서를 확장 할 수 있습니다.

CXF의 매핑이 정확합니다. JAXB annotation @XmlAnyElement(lax = true)은 해당 필드에 @XmlRootElement 또는 @XmlElementDecl으로 주석 된 요소가있는 경우 해당 요소가 org.w3c.dom.Element의 인스턴스로 설정되지 않으면 해당 클래스의 인스턴스가 필드 채우기에 사용됨을 의미합니다.

는 예를 들어 here

+0

하지만를 참조하십시오, 내가 서버에 요청을 보내고, 그것은 나를 응답합니다. 그런 다음 데이터를 가져 와서 호출해야합니다. result.getAny(). 그것은 나에게 물건을 줄 것이다. 그리고 메소드를 호출하고 싶습니다만, 그것은 객체입니다. Axis를 MessageElement로 캐스트합니다. 그리고 나는 그것에 특정한 방법을 부를 수 있습니다. 내 연습에서는이 클래스의 기능 중 하나를 재현해야하므로 데이터가 필요합니다. 요소를 Document 유형으로 변환하려고합니다. –

+0

문서에 따르면 DOM 구조에 액세스 할 수있게 해주는 org.w3c.dom.Element'로 객체를 캐스팅 할 수 있습니다. – pedrofb

+0

예, 제 질문에서 언급했습니다. 나는 다른 선택의 여지가없는 것처럼 보인다. 도와 주셔서 감사합니다. 감사합니다. –