문제

일부 서비스를 Apache SOAP에서 Axis2로 변환 중이므로 Java 서비스 클래스가 이미 존재합니다.Eclipse에서 새 프로젝트를 생성하고 소스를 가져온 다음 Axis2 프로젝트 패싯이 설치되었는지, Axis2 이미터 속성이 올바른지 확인했습니다.그런 다음 Eclipse에서 서비스 클래스를 선택하고 "웹 서비스 생성"을 선택하여 Axis2 런타임을 선택했습니다.서비스가 내 PC에서 실행되고 있으며 서비스 경로에 "?wsdl"을 추가하면 실제로 로컬에 저장하는 WSDL을 얻게 됩니다.클라이언트를 빌드하기 위해 이를 SoapUI로 가져오려고 하면 오류가 발생합니다.

ERROR:org.apache.xmlbeans.XmlException: C:\projects\soapUI\Axis2\DALService.wsdl:0: error: src-resolve: type 'SOAPException@http://www.w3.org/2001/XMLSchema' not found.

참조하는 유형(SOAPException)은 Apache SOAP 서비스의 보류이며 서비스 코드에서 서비스 코드(WSDL 아님)의 모든 "가져오기" 참조를 다음에서 변경했습니다. org.apache.soap.SOAPException (이전 Apache SOAP 패키지 이름) javax.xml.soap.SOAPException (Axis2 위치).코드에 액세스할 수 있으면 코드가 컴파일되고 작동하지만 클라이언트를 생성하지 않으면 액세스할 수 없습니다.객체의 네임스페이스를 변경하면 생성된 WSDL이 적절한 네임스페이스 참조를 갖지 못하게 되는 이유에 대해 어떻게 생각하시나요?

도움이 되었습니까?

해결책 2

왜 이런 일이 발생하는지 처음으로 말씀드리고 싶습니다. 하지만 제 생각에는 네임스페이스의 정확한 내용은 모두 동일하다면 중요하지 않을 수 있습니다.SOAPException은 일반 예외만 맹목적으로 확장하기 때문에 SOAPException의 특별한 기능도 사용하지 않습니다.어쨌든 세 가지 작업을 수행하여 SoapUI를 사용하여 XML에서 클라이언트를 구축할 수 있었습니다.

먼저 다음과 같이 SOAPException 자체를 나타내는 섹션을 추가했습니다.

    <xs:schema xmlns:test="http://service.PROJECT.DEPARTMENT.COMPANY.com" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://DEPARTMENT.COMPANY.com/xsd">
        <xs:import namespace="http://service.PROJECT.DEPARTMENT.COMPANY.com"/>
        <xs:complexType name="SOAPException">
            <xs:complexContent>
                <xs:extension base="ns:Exception">
                    <xs:sequence/>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:schema>

둘째, wsdl:definitions 블록에 다음 네임스페이스를 추가했습니다.

xmlns:im="http://DEPARTMENT.COMPANY.com/xsd"

셋째, SOAPException 기본 유형(fron)을 참조하는 네임스페이스를 변경했습니다. ns 에게 im 여기) 이전에 참조되었던 곳은 다음과 같습니다.

    <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://service.ims.im.sa.homedepot.com/xsd">
        <xs:complexType name="SOAPLocatorException">
            <xs:complexContent>
                <xs:extension base="im:SOAPException">
                    <xs:sequence>
                        <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
                        <xs:element minOccurs="0" name="messageCode" nillable="true" type="xs:string"/>
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:schema>

XML 파일은 여전히 ​​XMLSpy에서 명확하게 유효성을 검사하지 않지만 나에게 직접 영향을 주지 않는 좀 더 난해한 이유 때문입니다(Soap11 및 Soap12 바인딩에 대해 정의된 오류가 있는 작업에는 원시 HTTP 바인딩).

작동하더라도 다음 사항에 대해 여전히 약간 혼란스럽습니다.

  • Axis2가 SoApexception 유형에 대해 알고 있다면 (그리고 다른 예외의 기본 클래스로 언급했기 때문에) 왜 그것을 xs:schema 차단하다?
  • 같은 줄을 따라 다른 유형의 기본 클래스로 사용할 때 왜 잘못된 네임 스페이스에서 클래스를 참조 했습니까?
  • 이 유형의 네임 스페이스를 다음과 같이 설정 해야하는 이유 DEPARTMENT.COMPANY.comAxis2 패키지 나 서비스 객체의 패키지가 아닌가?

다른 팁

SOAP UI에 WSDL을 직접 표시 한 "XXX? WSDL"URL을 사용하면 WSDL에 언급 된 일부 XSD 스키마가 SOAP UI 도구에서 찾을 수없는 것처럼 보입니다. 일반적으로 이러한 도구는 동일한 폴더에서 스키마를 검색하십시오. org.apache.soap.soapexception to javax.xml.soap.soapexception이 있으므로 네임 스페이스가 변경되었을 수 있습니다.

완전한 URL을 사용해보고 결과를 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top