2010-08-11 35 views
9

Tôi đang tìm một máy khách SOAP cho Java.Java: Máy khách SOAP đơn giản

Apache Axis trông rất cồng kềnh với tôi. Tôi không hiểu tại sao mọi thứ phải phức tạp như vậy trong Java. Ví dụ: trong PHP, tất cả những gì tôi phải làm là:

<?php 
$global_service_wsdl='https://api.betfair.com/global/v3/BFGlobalService.wsdl'; 
$betfair=new SoapClient($global_service_wsdl); 

$params=array("request"=> 
    array("header"=> 
     array("clientStamp"=>0,"sessionToken"=>$session_token)),"locale"=>"" 
); 
$response=$betfair->getAllEventTypes($params); 
?> 

Và đối tượng phản hồi $ của tôi chứa tất cả thông tin tôi yêu cầu.

Ai có thể đề xuất cách tôi sẽ triển khai một cái gì đó như thế này trong Java mà không có quá nhiều rắc rối?

Nhiều cảm ơn trước,

~ Sửa 1 ~

@jarnbjo:

Đó là rất hữu ích đối với tôi. Các bit tôi đang mắc kẹt trên là những gì nhập khẩu nào tôi cần để có được mã để chạy?

Tôi chạy lệnh này: đầu ra sh wsdl2java.sh -o -một -URI https://api.betfair.com/global/v3/BFGlobalService.wsdl

Và xây dựng đầu ra. Bạn có nghĩ rằng điều này nhanh hơn PHP không? Ngoài ra, tôi đã có một tùy chọn "không đồng bộ". Điều này có nghĩa là tôi có thể thực hiện cuộc gọi không đồng bộ không? Điều đó sẽ rất hữu ích. Tôi muốn chạy tất cả điều này bên trong một máy chủ websocket dựa trên Java.

+0

maxlols >> Tôi không hiểu tại sao mọi thứ cần phải quá phức tạp trong Java. –

Trả lời

12

Trừ khi bạn cần chức năng bổ sung không được cung cấp bởi khách hàng SOAP trong Java API tiêu chuẩn, bạn có thể sử dụng công cụ wsimport trong thư mục bin của JDK (trỏ nó đến URL WSDL của bạn) và để nó tạo ra các lớp Java cho mặt tiền dịch vụ.

Với các lớp được tạo ra, bạn cần một số mã Java hơn trong ví dụ PHP của bạn để thực hiện các yêu cầu, nhưng nó vẫn còn hợp lý:

BFGlobalService betfair = new BFGlobalService_Service().getBFGlobalService(); 

APIRequestHeader header = new APIRequestHeader(); 
header.setClientStamp(0); 
header.setSessionToken("someSessionToken"); 

GetEventTypesReq req = new GetEventTypesReq(); 
req.setHeader(header); 
req.setLocale(""); 

GetEventTypesResp response = betfair.getAllEventTypes(req); 

Ví dụ này không thành công với một lỗi, nhưng có lẽ vì token phiên không có hiệu lực.

+0

Rất cám ơn. Vui lòng xem chỉnh sửa. – Eamorr

+2

+1 để đề cập công cụ nhập. Đây là lần đầu tiên tôi nghe nói về điều này – Webnet

0

Hãy xem CXF

+1

Hey, tôi đã tải xuống, nhưng tôi thành thật không biết bắt đầu từ đâu. Tôi chỉ muốn cung cấp cho một khách hàng SOAP đối tượng url wsdl của tôi, kích hoạt một số yêu cầu và xem một số câu trả lời. Chắc chắn một vài dòng Java là tất cả những gì nó cần? – Eamorr

2

Java là tĩnh đánh máy, có nghĩa là trình biên dịch cần phải biết bất kỳ phương pháp trước khi bạn có thể gọi nó trực tiếp trong mã nguồn của bạn. Điều này có nghĩa là bạn cần các lớp sơ khai Java mô tả dịch vụ web, vì vậy bạn có một cái gì đó để gọi. Thường có một tiện ích với một chồng dịch vụ web làm chính xác điều này.

Bạn có thể tìm thấy câu hỏi này thú vị What methods exist to auto-generate java client stubs from WSDL files?

2

Tôi sẽ lặp lại CXF, nhưng với ví dụ về cách sử dụng nó. Tuy nhiên, điều này giả định bạn đã chạy công cụ CXF/JAXWS để tạo mã Java dựa trên wsdl.

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
factory.setServiceClass(TheGeneratedInterface.class); 
factory.setAddress("hostUrlGoesHere"); 
client = (TheGeneratedInterface) factory.create(); 
return client.methodNameGoesHere(request); 

Mã để viết không quá khó. Phần khó hơn thực sự là tìm ra cách để tạo ra mã Java cần thiết từ wsdl. Nó không khó, chỉ là bạn phải có được câu lệnh đúng dòng lệnh.

2

Kiểm tra "Gửi hoặc Đăng thông báo SOAP bằng SAAJ (tài liệu/chữ)" ... Nó cho phép bạn gửi và nhận XML thông qua SOAP và thao tác nội dung của phong bì SOAP trực tiếp mà không cần phân tích cú pháp và giải thích/ràng buộc vào các đối tượng java như khi bạn sử dụng wsimport ...

http://users.skynet.be/pascalbotte/rcx-ws-doc/saajpost.htm

Trân

Các vấn đề liên quan