웹 서비스 개발 에서 흔히 볼 수 있 는 네 가지 문 제 를 상세 하 게 풀다.
12993 단어 xmlwebserviceSOAP
질문 1: WebService 및 방법 재 업로드
우선 웹 서 비 스 는 재 업로드 방법 을 지원 하지 않 습 니 다.다음은 예 를 들 어 설명 한다.
예 를 들 어 다음 웹 서비스 인 터 페 이 스 를 정의 합 니 다.
1 @WebService
2 public interface IHello {
3 @WebMethod
4 public String sayHello(int id);
5
6 @WebMethod
7 public String sayHello(String name);
8
9 @WebMethod
10 public String sayHello2(int id);
11
12 @WebMethod
13 public String sayHello2(int id, String name);
14 }
먼저 방법 sayHello () 를 살 펴 보고 클 라 이언 트 가 다음 과 같은 SOAP 요청 을 보 내 면:
1 <soap:Envelope>
2 <soap:Body>
3 <sayHello>
4 <arg0>11</arg0>
5 </sayHello>
6 </soap:Body>
7 </soap:Envelope>
SOAP 요청 을 통 해 클 라 이언 트 가 호출 방법 을 sayHello () 로 해 야 하 는 것 을 알 수 있 습 니 다. 전달 하 는 매개 변 수 는 11 이지 만 정수 11 인지 문자열 '11' 인지 알 수 없 기 때문에 호출 하 는 방법 이 어느 것 인지 알 수 없습니다.
다음은 sayHello 2 () 를 살 펴 보 겠 습 니 다. 만약 에 클 라 이언 트 가 전달 하 는 매개 변수 가 하나의 id 값 만 포함 된다 면 예 를 들 어:
1 <soap:Envelope>
2 <soap:Body>
3 <sayHello2>
4 <arg0>1</arg0>
5 </sayHello2>
6 </soap:Body>
7 </soap:Envelope>
클 라 이언 트 가 전달 하 는 두 번 째 인자 가 비어 있 기 때문에 호출 하 는 방법 이 무엇 인지 판단 할 수 없습니다.
일반적으로 리 셋 방법 이 포 함 된 웹 서 비 스 를 발표 할 때 이상 이 발생 하거나, 하나의 방법 을 호출 할 때 서버 측 보고 서 는 대응 하 는 방법 을 찾 지 못 합 니 다.
문제 2: 내 데이터 가 수정 되 었 습 니까?
웹 서비스 인터페이스 먼저 보기:
1 @WebService
2 public interface IHello {
3
4 @WebMethod
5 public String sayHello(IPerson person);
6
7 }
8
9 public interface IPerson {
10 ...
11 }
12
13 public class Person implements IPerson{
14 ...
15 }
여기 서 주의해 야 할 것 은 웹 서비스의 방법 sayHello () 의 매개 변 수 는 구체 적 인 클래스 가 아 닌 인터페이스 입 니 다 (예 를 들 어 Aegis 바 인 딩 은 이러한 웹 서 비 스 를 직접 발표 할 수 있 습 니 다).클 라 이언 트 가 sayHello () 를 호출 할 때 Person 대상 을 전달 하여 IPerson 인 터 페 이 스 를 실현 합 니 다.중간 일련의 XML 과 대상 간 의 전환 과정 을 거 쳐 서버 에서 얻 은 것 은 IPerson 인 터 페 이 스 를 실현 한 실례 일 뿐이다. 이것 은 반드시 Person 대상 이 아니 라 강제로 Person 으로 전환 하려 면 이상 을 던 질 수 있다.
문 제 는 Aegis 가 XML 을 자바 대상 으로 바 꾸 는 것 이 프 록 시 나 CGlib 같은 도 구 를 통 해 '프 록 시 클래스' 를 만들어 IPerson 인 터 페 이 스 를 실현 한 다음 에 이 프 록 시 클래스 의 인 스 턴 스 를 만 드 는 것 이다. 그것 은 Person 이 아 닐 것 이다.
질문 3: 반복 참조
예 를 들 어 보 겠 습 니 다.다음은 웹 서비스의 인터페이스 입 니 다.
1 @WebService
2 public interface IHello {
3
4 @WebMethod
5 public String sayHello(Teacher teacher);
6
7 }
8
9 public class Teacher {
10 private Student[] students;
11
12 //getters and setters
13 ...
14 }
15
16 public class Student {
17 private Teacher teacher;
18
19 //getters and setters
20 ...
21 }
Teacher 와 Student 는 한 쌍 이 넘 는 '쌍방 향' 관계 라 는 점 에 유의 하 세 요.이런 상황 에서 우 리 는 어떻게 Teacher 대상 을 XML 로 바 꿀 수 있 는 지 생각해 볼 수 있다.
당신 은 아래 의 답 을 생각 할 수 있 습 니 다.
1 <teacher>
2 <students>
3 <teacher>
4 <students>
5 <teacher>
6 <students>
7 ...
8 </students>
9 ...
10 </teacher>
11 </students>
12 ...
13 </teacher>
14 </students>
15
16 <students>
17 ...
18 </students>
19 ...
20 </teacher>
보 셨 죠? XML 도 '사순환' 에 들 어 갑 니 다.문제 의 근원 은 대상 간 의 순환 인용 에 있다.이 문 제 는 클 라 이언 트 가 WebService 요청 을 보 내기 전에 이상 을 던 집 니 다. 이 대상 을 전송 가능 한 XML 로 변환 할 수 없 기 때 문 입 니 다.
문제 4: 거대 한 물건
아니면 예 를 들 어 웹 서비스의 인터페이스 입 니 다.
1 @WebService
2 public interface IHello {
3
4 @WebMethod
5 public String sayHello(Student[] students);
6
7 }
8
9 public class Teacher {
10 ...
11 }
12
13 public class Student {
14 private Teacher teacher;
15
16 //getters and setters
17 ...
18 }
이 방법 은 한 Student 배열 을 받 아 수백 수천 명의 Student 를 포함 하 는데 위의 예 와 달리 Student 와 Teacher 는 현재 다 대 1 의 단 방향 관계 이기 때문에 '순환 인용' 문 제 는 없 을 것 이다.이 모든 Student 의 Teacher 가 한 사람 이 라 고 가정 해 봐.우 리 는 이 Student 배열 의 대상 을 XML 로 바 꾸 려 고 합 니 다. 다음 과 같 습 니 다.
1 <student>
2 <teacher>
3 ...
4 </teacher>
5 </student>
6 <student>
7 <teacher>
8 ...
9 </teacher>
10 </student>
11 ...
문제 가 나 왔 습 니 다. 보 셨 습 니까? 모든 Student 노드 아래 에 Teacher 노드 가 있 습 니 다. 이 XML 이 수신 자가 Student 배열 로 바 뀌 었 을 때 모든 학생 들 은 자신의 선생님 이 있 었 습 니 다. Teacher 대상 은 수백 수천 번 복사 되 었 습 니 다. 이런 전환 - 전송 - 전환 과정 을 거 쳐 이 배열 의 대상 은 정말 '거대 한 물건' 이 되 었 습 니 다.
문 제 는 스 튜 던 트 와 티 처 간 관계 가 다 대 일 로, '다' 자 를 전송 할 때 '1' 자가 여러 차례 복 제 될 수 있다 는 점 에서 비롯 됐다.대량의 네트워크 전송 대역 폭 과 메모 리 를 점용 합 니 다.여기 서 매개 변 수 는 반드시 하나의 집합 이나 배열 이 아 닙 니 다. 예 를 들 어 ObjectA 와 ObjectB 는 모두 ObjectC 에 대한 인용 이 있 습 니 다. SOAP 를 통 해 전송 한 후에 ObjectC 는 하나 에서 두 개 로 바 뀌 었 습 니 다. 각각 ObjectA 와 ObjectB 에 속 하고 더 이상 ObjectC 를 공유 하 는 것 이 아 닙 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
XML이란 무엇입니까?이것은 저장, 검색 및 공유할 수 있는 형식으로 데이터를 저장하는 강력한 방법입니다. 가장 중요한 것은 XML의 기본 형식이 표준화되어 있기 때문에 시스템이나 플랫폼 간에 로컬 또는 인터넷을 통해 XML을 공유하거나...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.