문제

Axis2 및 Eclipse에서는 웹 서비스 클라이언트를 생성하고 자체 유형을 작성하는 대신 패키지에 이미 가지고있는 Java 유형을 사용하도록 할 수 있습니까? 물론 유형 A가 이미 생성되어 있고 자체 유형 AI를 생성한다면 유형 A의 변수를 유형 B 변수에 할당 할 수는 없습니다.

WSDL은 웹 서비스에서 애플리케이션 서버로 배포 된 웹 서비스에서 생성됩니다. 그로부터 생성 할 수 없다면 이미 존재하는 Java 파일에서 클라이언트를 생성 할 수 있습니다.

도움이 되었습니까?

해결책

기존 클래스를 실제로 재사용하려면 WSDL2Java를 사용하여 클라이언트를 생성하지 않고 Axis2 API를 직접 호출 할 수 있습니다. 아래는 웹 서비스를 호출하는 비교적 간단한 코드입니다. 웹 서비스 엔드 포인트, 메소드 Qname, 예상 반환 클래스 (ES) 및 서비스에 대한 인수를 작성하면됩니다. 기존 클래스를 반환 값 또는 인수로 재사용 할 수 있습니다.

웹 서비스가 매우 복잡하다면이 접근 방식을 얻기 위해 API를 더 깊이 들어가야한다는 것을 알 수 있습니다.

serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();

EndpointReference targetEPR = new EndpointReference("http://myservice");

options.setTo(targetEPR);

QName methodName = new QName("ns","methodName");

Class<?>[] returnTypes = new Class[] { String.class };

Object[] args = new Object[] { "parameter" };

Object[] response = serviceClient.invokeBlocking(methodName, args,
                returnTypes);

다른 팁

WSDL에서 웹 서비스 클라이언트를 생성하고 있습니까?

WSDL2Java 도구가 알고있는 유일한 것은 WSDL의 정보이므로 이미 작성한 유형에 대해서는 알 수 없습니다.

유형 정보를 WSDL로 가져올 수 있다면 시도한 적이 없지만 작동하지 않을 수 있습니다.

유형 A에서 B 형으로 쉽게 복사하는 방법을 원한다면 시도해 볼 수 있습니다. beanutils.copyproperties, 타입 A와 타입 B 일치의 세터와 getter가 길어지는 한.

거의 대부분의 Java 웹 서비스 프로젝트가이를 통해 진행됩니다. .NET/C# World가 더 우아한 솔루션을 가지고 있는지 모르겠습니다.

Mike가 언급했듯이 Beanutils.copyproperties를 사용하는 것이 합리적입니다.

Br,
~ a

Eclipse를 IDE로 사용하는 경우 필요합니다. http://www.eclipse.org/webtools/. 그것은 당신이 원하는 것과 정확히 다른 일을 넘어서고 있습니다.

ServiceClient 클래스를 직접 사용하여 Web Service를 호출 할 수 있습니다. 웹 서비스는 XML 만 사용하고 XML 응답을 반환합니다. 다양한 웹 서비스 방법의 경우 XML 응답을 일부 Java Pojo로 변환하여 사용해야합니다. 응답 처리 만 끝에 수행해야합니다. XML에서지도 등을 좋아할 수 있습니다 ...

따라서 웹 서비스를 호출하기 위해 다른 스터브 클래스가 필요하지 않으며 응답 XML 만 처리하면됩니다. Castor 또는 JaxB Libs를 사용하여 XML을 Pojo로 변환 할 수 있습니다.

이것이 Diff를 위해 매번 클라이언트를 수정할 필요가없는 방법입니다. 웹 서비스. 외부 클라이언트에 응답 처리기를 제공하는 것처럼 개발할 수 있습니다. 따라서 모든 다른 웹 서비스에 대해 차이가 있습니다. 귀하의 인터페이스를 구현하는 응답 처리기 클래스.

//common interface for response handlers...
//implement this for diff. web service/methods
public interface WSRespHandler{
    public Object getMeResp(Object respData);
}


//pass particular handler to client when you call some WS
public class WebServiceClient {
    public Object getResp(WSRespHandler respHandler) {
        ..

        return repHandler.getMeResp(xmlData);
    }
}

참조:

http://www.developer.com/java/web/article.php/3863416/using-axis2-and-java-for-asynchronous-web-service-invocation-on-ly-client-side.htm

http://www.devdaily.com/blog/post/java/java-web-service-client-read-array-list/

감사해요.

www.techlads.com

In case this post is still of any use to someone I read the axis2 generating clients guide: http://axis.apache.org/axis2/java/core/docs/userguide-creatingclients.html.

It seems that the Axis2 Eclipse plugin is configured to call ADB code generation in integrated mode (see http://axis.apache.org/axis2/java/core/docs/adb/adb-howto.html), thus creating inner classes in the Web service stub. I don't know if changing the generation mode to expanded mode (generate data classes out of the stub class) is possible, but you can do it command line using Wsdl2Java:

    %AXIS2_HOME%\bin\WSDL2Java -uri <wsdl file path> -p <package name> -u

The -u option tells the ADB code generator to create data classes as separate classes and not inner classes in the stub.

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