Axis 2 의 매개 변 수 를 깊이 있 게 분석 하여 복잡 한 사용자 정의 유형 값[단계 접근 실천 편]
6278 단어 자바webservice
틀림없이
이전 블 로 그 는 Axis 2 의 반환 값 을 사용자 정의 대상 과 복잡 한 유형 으로 깊이 분석 했다.예 를 들 어 List
이 블 로 그 는 사용자 대상 이나 List
우선 매개 변 수 는 User 대상 입 니 다.
서버 쪽 은 평소 와 같다.아니면 최초의 문서 로 만 들 까?그 중 하 나 는 다음 과 같다.
public User getUserName(User u){
User user= new User();
user.setAge(u.getAge()+10);
user.setName( "^"+u.getName()+ "^");
user.setId(u.getId()+1);
return user;
}
그럼 우리 클 라 이언 트 는 어떻게 전달 합 니까?
물론 우 리 는 Axiom 방식 을 사용한다.
Axiom 에서 전 달 된 매개 변 수 는 OMElement 형식 이 어야 하기 때 문 입 니 다.그래서?우 리 는 사용자 정의 대상 을 OMElement 대상 으로 바 꿔 야 합 니 다.
그럼 어떻게 바 꿔 요?
// user omElment
public static OMElement castElment(User u){
javax.xml.stream.XMLStreamReader reader = BeanUtil.getPullParser(u);
StreamWrapper parser = new StreamWrapper(reader);
StAXOMBuilder stAXOMBuilder =OMXMLBuilderFactory.createStAXOMBuilder(OMAbstractFactory. getOMFactory(), parser);
OMElement element = stAXOMBuilder.getDocumentElement();
return element;
}
그럼 전 환 된 OMElement 결 과 를 계속 분석 해 볼 까요?
OMElement param=
castElment
(u);
//출력 변환 후의 omElement 대상
System.
out
.println(param);
결 과 는 다음 과 같다.
실제로 전 달 된 것 은 xml 입 니 다.
main 방식 은 다음 과 같 습 니 다.
public static void main(String[] args) throws Exception {
EndpointReference targetEPR = new EndpointReference("http://localhost:8080/testWSServerByAxis2/services/myService?wsdl" );
try {
Options options = new Options();
options.setTo(targetEPR);
//
ServiceClient sender = new ServiceClient();
sender.setOptions(options);
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace("http://test.com" , "" );
//
OMElement method = fac.createOMElement("getUserName" , omNs);
// , omNode 。 omNode
// omNode
User u= new User();
u.setId(0);
u.setAge(10);
u.setName( " ");
OMElement param= castElment(u);
// omElement
System.out.println(param);
method.addChild(param);
// OMElement
OMElement result = sender.sendReceive(method);
System.out.println("clientResult="+result);
Iterator iterator=result.getChildElements();
while(iterator.hasNext()){
System.out.println("ok");
OMNode omNode = (OMNode) iterator.next();
if(omNode.getType()==omNode. ELEMENT_NODE){
OMElement omElement = (OMElement) omNode;
System.out.println("***="+omElement.getLocalName());
if (omElement.getLocalName().toLowerCase().equals("return" )) {
User u1 = (User) BeanUtil.processObject(omElement, User. class, null, true, new DefaultObjectSupplier());
System.out.println(u1.getName());
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
아니면 이전 블 로그 의 반환 값 에 따라 얻 은 결 과 는 다음 과 같다.
clientResult=<ns:getUserNameResponse xmlns:ns="http://test.com"><ns:return xmlns:ax21="http://entity.com/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax21:User"><ax21:age>20</ax21:age><ax21:id>1</ax21:id><ax21:name>^ ^</ax21:name></ns:return></ns:getUserNameResponse>
그 다음으로 List
'List'를 어떻게 전달 할 지 생각해 보 세 요.소식 으로 바 뀌 면 어 떨 까?
전달 매개 변 수 는 반드시 OmElement 이 어야 하기 때문에 List 가 어떻게 전 환 된 OmElement 대상 을 볼 까요?
// List omElment
public static OMElement castElment(List<User> userList){
// OMFactory
OMFactory factory = OMAbstractFactory. getOMFactory();
OMNamespace omNamespace = factory.createOMNamespace("http://test.com" , "" );
OMElement omElement = BeanUtil. getOMElement(new QName("root"), userList.toArray(), new QName("user"), false, null);
return omElement;
}
그 변환 후의 출력 결 과 는:
<root><user><age>10</age><id>0</id><name> 0</name></user><user><age>11</age><id>1</id><name> 1</name></user><user><age>12</age><id>2</id><name> 2</name></user></root>
출력 된 OMElement 를 주의 깊 게 관찰 합 니 다.그 중 에는 use 태그 가 포함 되 어 있 습 니 다.이렇게 다음 에 이러한 List 반환 값 을 얻 는 OMElement 는 user 에서 꺼 내 대상 으로 밀봉 하면 됩 니 다.
그리고 주의 가 필요 합 니 다.
:BeanUtil.
getOMElement 방법의 첫 번 째 매개 변 수 는 null 일 수 없습니다.출력 은 대상 밖 에 탭 이 있 습 니 다.세 번 째 매개 변 수 는 패 키 징 대상 의 태그 이름 입 니 다.
이렇게 되면 Axis 2 는 기본적으로 정상적으로 사용 에 들 어 갈 수 있다.Axis 2 에 서 는 복잡 한 사용자 정의 형식 을 xiom 방식 으로 처리 할 수 있 지만 솔직히 전환 이 필요 합 니 다.하지만 CXF 에 서 는 별로 귀 찮 지 않 았 다.직접 전달 하면 됩 니 다.
그러나 사람 이 완벽 하지 않다 는 것 은 Axis 2 의 인터페이스 매개 변수 가 무엇 인지,서 비 스 를 발표 한 후 생 성 된 wdl 의 element 의 이름 은 인터페이스 매개 변수 이름과 같다.하지만 CXF 에 서 는 달 랐 다.CXF 가 주석 없 이 이름 을 바 꾸 면 기본 적 인 상황 은 arg 0,arg 1 입 니 다.
따라서 모든 것 이나 우리 자신 에 게 도 장점 을 살 리 고 단점 을 피해 야 합 니 다.(*^ ^*)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.