JAX - WS 기반 웹 서비스 서버/클 라 이언 트
4898 단어 WebService
JAX_RPC (Java API for XML - Based RPC) 는 자바 응용 프로그램 이 이미 알 고 있 는 설명 정 보 를 통 해 자바 기반 웹 서 비 스 를 호출 할 수 있 도록 합 니 다. 설명 정 보 는 웹 서비스의 WSDL 설명 과 일치 합 니 다.
JAX - RPC 2.0 은 JAX - WS 2.0 (XML 기반 웹 서비스 용 Java API) 으로 이름 을 바 꾸 었 다.
JAX - WS 에서 원 격 호출 은 SOAP 와 같은 XML 기반 프로 토 콜 로 전환 할 수 있 습 니 다.개발 자가 JAX - WS 를 사용 하 는 과정 에서 SOAP 메 시 지 를 생 성하 고 처리 하 는 코드 를 작성 할 필요 가 없습니다. JAX - WS 가 실 행 될 때 API 호출 을 해당 SOAP 메시지 로 자동 으로 변환 합 니 다.
서버 측 에서 사용 자 는 자바 언어 를 통 해 원 격 호출 에 필요 한 인 터 페 이 스 를 정의 하고 이에 상응하는 실현 을 제공 해 야 하 며, JAX - WS 를 호출 하 는 서비스 발표 인 터 페 이 스 를 통 해 이 를 WebService 인터페이스 로 발표 할 수 있다.
클 라 이언 트 에서 사용 자 는 JAX - WS 의 API 를 통 해 원 격 서버 에 대한 호출 을 실현 할 수 있 습 니 다.
JAX - WS 서버:
JAX - WS 서버 에 서 는 설명 설명 WebService 를 사용 하여 웹 서비스 설명 파일 에 의존 하지 않 습 니 다.
JDK 1.6 사용 하기45 (JDK 1.5 에는 필요 한 클래스 가 포함 되 지 않 음)
package com.sean.server;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public interface Plus {
@WebMethod
public int plus(@WebParam(name="x") int x,@WebParam(name="y") int y);
}
package com.sean.server;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public class PlusImpl implements Plus {
@WebMethod
public int plus(@WebParam(name="x") int x, @WebParam(name="y") int y) {
return x + y;
}
}
package com.sean.server;
import javax.xml.ws.Endpoint;
public class Server {
public static void main(String[] args) {
PlusImpl plus = new PlusImpl();
String addr = "http://127.0.0.1:8888/Plus";
Endpoint.publish(addr, plus);
}
}
프로그램 시작 후 접근http://127.0.0.1:8888/Plus?wsdl자동 으로 생 성 되 는 WSDL 파일 을 볼 수 있 습 니 다.
使用 SoapUI5.0.0尝试用上面的WSDL创建WebService服务端报错(org.apache.xmlbeans.XmlException:error:does not close tag.)
使用SoapUI4.5.2则一切正常,只能归咎于不同版本的SoapUI对文件格式校验不同
JAX-WS客户端:
package com.sean.client;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import com.sean.server.Plus;
public class Client {
public static void main(String[] args) throws Exception {
QName serviceName = new QName("http://server.sean.com/", "PlusImplService");
QName portName = new QName("http://server.sean.com/", "PlusImplPort");
String addr = "http://127.0.0.1:8888/Plus?wsdl";
URL url = new URL(addr);
Service service = Service.create(url, serviceName);
Plus plus = service.getPort(portName,Plus.class);
//Plus plus = service.getPort(Plus.class);
int result = plus.plus(1, 2);
System.out.println("result:" + result);
}
}
Plus plus = service. getPort (Plus. class) 방법 을 사용 할 때 클 라 이언 트 호출 오류:
Exception in thread "main" javax.xml.ws.WebServiceException: Undefined port type: {http://server.sean.com/}Plus
해결 방법 1:
클 라 이언 트 예제 와 같이 Plus plus = service. getPort (Plus. class) 를 Plus plus = service. getPort (portName, Plus. class) 로 변경 합 니 다.
해결 방법 2:
PlusImpl 클래스 의 @ WebService 표 시 를 @ WebService (endpoint 인터페이스 = "com. sean. server. Plus"로 변경)
참고:http://stackoverflow.com/questions/13417454/javax-xml-ws-webserviceexception-undefined-port-type-java-struts-soap-wsdl
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
귀멸의 칼날, 토호를 멸비정상적인 고부하에 대비하는 것은 쉽지 않은 것은 중대한 인식에 있습니다. 10/13(화) 00:00:00←예매권의 좌석 지정・신규 감상권 구입 접수 개시 나도 귀멸의 칼 팬 중 한 명으로 예매권을 구입하고 좌석 지...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.