青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大龍的博客

常用鏈接

統(tǒng)計

最新評論

使用SAAJ 和JAXM的 SOAP客戶端及服務 --- 轉自http://oss.org.cn/ossdocs/one_and_net/app7/12.1.htm

本模塊講述了如何使用用于JavaTM 的帶附件的SOAP(SAAJ)和用于XML消息的Java TM API(JAXM)創(chuàng)建能夠發(fā)送和接收消息的客戶端,以及如何部署它們到Sun ONE Application Server上。本模塊包括以下幾節(jié):

SOAP客戶端


本節(jié)講述了SOAP客戶端可以采用的兩種消息模型以及開發(fā)和部署這類客戶端的過程。本節(jié)包括以下主題:

SOAP客戶端消息模型

可以使用以下兩種消息模型建立SOAP客戶端

沒有消息提供者的客戶端

不使用消息提供者的應用程序只能交換同步消息。也就是說,扮演客戶端角色的應用程序只能發(fā)送請求-響應消息。這種類型的客戶端采用SAAJ API的SOAPConnection方法。下圖演示了在沒有消息提供者的情況下,同步消息如何在發(fā)送者和接收者之間交換。

不使用消息提供者的SOAP消息


不使用消息提供者的客戶端具有以下優(yōu)點:

  • 可以采用J2SE平臺編寫應用程序。
  • 不需要在servlet或J2EE容器中部署應用程序。
  • 不需要配置消息提供者。

不使用消息提供者的客戶端具有以下局限性:

  • 客戶端只能發(fā)送請求-響應消息
  • 客戶端只能扮演客戶端角色

使用消息提供者的客戶端

如果想要獲得并且保存在任何時間發(fā)送給你的請求,你必須使用消息提供者。JAXM API提供了使用消息提供者發(fā)送和接收消息的框架。你需要在容器中運行客戶端,容器提供了消息基礎結構讓提供者使用。下圖演示了在使用消息提供者的情況 下,異步消息如何在發(fā)送者和接收者之間交換。

使用消息提供者的SOAP消息


使用消息提供者的客戶端具有以下優(yōu)點:

  • 客戶端能夠扮演客戶端或者服務角色
  • 客戶端能夠切換消息傳遞給提供者
  • 在客戶端傳遞消息到最終接收者之前,它能夠發(fā)送消息到一個或多個目的地。這些中間的消息接收者被稱為actor,它們在消息的SOAPHeader對象中被指定。
  • 客戶端能夠利用任何提供者支持的SOAP消息協(xié)議和影響消息類型與可靠性的‘服務質量’,以及消息傳遞服務的質量。

注意

Sun ONE Application Server包含了一個示例JAXM提供者,它演示了如何使用提供者為發(fā)送客戶端激活“發(fā)后不理(fire and forget)”消息。請察看示例文檔獲取關于如何激活、部署和使用它的全面信息。示例應用程序可以從以下位置得到:

install_dir/samples/webservices/jaxm/jaxm-provider/

Sun ONE Application Server的未來版本將會包括支持可靠SOAP消息和ebXML消息的JAXM提供者。


SOAP消息

本節(jié)向你介紹SOAP消息的結構和組成部分、如何訪問它們、以及如何處理SOAP消息。本節(jié)講述以下主題:

SOAP消息的組成部分

SOAP消息是一個包括SOAPEnvelope、一個可選的SOAPHeader、以及SOAPBody的XML文件。SOAP消息頭包含了使消息在到達最終目的地之前,能夠被路由到一個或多個中間節(jié)點的信息。

  SOAP消息的組成部分

這個圖展示了SOAP消息的結構和組成部分。不同對象代表了SOAP消息的每一個部分。

SOAPMessage對象包括:

  • 一個SOAPPart對象,其中包括
    • 一個SOAPEnvelope對象,其中包括
      • 一個空的SOAPHeader對象 – 可選,包括它是為了方便,因為大多數(shù)消息都要用到它。
      • 一個空的SOAPBody對象 -可以容納消息的內容,還能容納包含了狀態(tài)信息或者消息故障明細的錯誤消息。
  • AttachmentPart可能容納普通文本或者圖像文件。

SOAPEnvelope是代表消息的XML文件的根元素。它為消息如何處理、由誰處理定義了框架。XML內容從SOAPEnvelope開始。

SOAPHeader是添加特性到SOAP消息的基本機制。它可以容納任意數(shù)目的擴展了基礎協(xié)議 的子元素。例如,header子元素可能會定義認證信息、事務信息、本地信息、等等。處理消息的軟件可以在沒有事先約定的情況下,使用這個機制定義誰應該 處理某個特性,以及該特性是強制的還是可選的。

body是發(fā)給消息最終接收者的強制信息的容器。SOAP消息還可以容納一個附件,它不一定非得是XML文件。

訪問消息的元素

當創(chuàng)建消息體或附件的時候,以及處理消息的時候,你需要訪問消息的組成部分。

SOAPMessage對象含有一個SOAPPart對象。通過message對象可以得到它。

SOAPPart soapPart = message.getSOAPPart();

然后你可以利用SOAPPart獲得它所含有的SOAPEnvelope對象。

SOAPEnvelope envelope = soapPart.getEnvelope();

現(xiàn)在你可以利用envelope獲得它的空SOAPHeader和SOAPBody對象。

SOAPHeader header = envelope.getHeader();

SOAPBody body = envelope.getBody();

SOAPBody對象最初是空的。

命名空間

XML命名空間是一種限定元素和屬性名稱的方法,目的是消除它們與同一文件中其他名稱之間產生的歧義。一個名確的XML命名空間聲明采用如下格式:

<prefix:myElement

xmlns:prefix ="URI">

聲明定義prefix作為一個特定URI的別名。在myElement元素內,你可以對任何元素或屬性使用前綴,從而指定元素或屬性屬于URI指定的命名空間。下面的代碼是命名空間聲明的一個例子。

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">

該定義定義了SOAP_ENV作為命名空間http://schemas.xmlsoap.org/soap/envelope/

的別名。

定義了別名之后,可以使用它作為Envelope元素中任何屬性或元素的前綴。

預定義的SOAP命名空間

  • SOAPEnvelope,SOAP消息的根元素,擁有下面的命名空間標識http://schemas.xmlsoap.org/soap/envelope
  • SOAP serialization,定義SOAP序列化規(guī)則的URI,擁有下面的命名空間標識"http://schemas.xmlsoap.org/soap/encoding".。

當使用SAAJ或JAXM構造或者消費消息的時候,你有責任保證正確設定或處理命名空間,并且丟棄含有錯誤命名空間的消息。

創(chuàng)建SOAP消息的時候使用命名空間

當創(chuàng)建SOAP消息的body或header元素的時候,你必須使用命名空間為元素指定一個完整的名稱。通過調用方法SOAPEnvelope.createName可以獲得一個名稱。

調用該方法時,可以傳遞一個本地名稱作為參數(shù),或者可以指定本地名稱、前綴、以及URI。例如,下面的命令行定義了一個名為bodyName的Name對象。

Name bodyName = MyEnvelope.createName("TradePrice", "GetLTP", "http://foo.eztrade.com");

這和下面的命名空間聲明作用相同。

<GetLTP:TradePrice xmlns:GetLTP= "http://foo.eztrade.com">

下面的代碼演示了如何創(chuàng)建一個名稱并把它和SOAPBody元素綁定。注意createName方法的使用和位置。

SoapBody body = envelope.getBody();//get body from envelope

Name bodyName = envelope.createName("TradePrice", "GetLTP", "http://foo.eztrade.com");

SOAPBodyElement gltp = body.addBodyElement(bodyName);

開發(fā)SOAP客戶端

利用SAAJ,客戶端能夠以點對點的方式創(chuàng)建并且發(fā)送SOAP消息。JAXM為使用消息提供者的 XML消息定義了API。JAXM依賴用于 Java 的帶有附件的 SOAP API(SAAJ),它定義了在Java中操作帶有附件的SOAP消息模型的API。Sun ONE Application Server不包括它所支持的JAXM消息提供者。然而它的確包含了示例應用程序,一個簡單的JAXM提供者,演示了一個消息提供者如何處理來自客戶端的 異步SOAP消息。本節(jié)講述以下主題:

SOAP消息是如何出現(xiàn)的?

當消息工廠生產的SOAP消息通過連接被發(fā)送到一個端點的時候,SOAP消息就出現(xiàn)了。本節(jié)講述以下主題:

端點

端點標識消息的最終目的地。端點是由URLEndpoint類來定義的。如果不使用提供者,你可以構造或者查找到一個消息端點。

構造端點

你可以通過調用構造函數(shù)或者在名稱服務中查找來初始化一個端點。

以下代碼使用構造函數(shù)創(chuàng)建一個URLEndpoint:

myEndpoint = new URLEndpoint("http://host/myServlet")

使用端點發(fā)送消息

指定端點作為SOAPConnection.call方法的一個參數(shù),該方法是用來發(fā)送SOAP消息的。

向多個端點發(fā)送消息

管理對象是封裝了針對提供者的配置和命名信息的對象。如果使用管理對象定義端點,需要注意的是:可以把該管理對象綁定到多個URL——每個URL都能夠處理到達的SOAP消息。

以下代碼示例把lookup名稱為myEndpoint的端點綁定到兩個URL:http://www.myServlet1/

和 http://www.myServlet2/。這個語法允許你使用SOAP連接發(fā)布SOAP消息到多個端點。

imqobjmgr add
   -t e
   -l "cn=myEndpoint"
   -o "imqSOAPEndpointList=http://www.myServlet1/
      http://www.myServlet2/"

連接

想要利用SAAJ或JAXM發(fā)送SOAP消息,必須分別獲得一個SOAPConnection 或ProviderConnection。你還可以使用消息隊列傳輸消息;更多信息請參見Sun ONE消息隊列開發(fā)人員指南。

SOAP 連接

SOAPConnection允許你直接向遠程伙伴發(fā)送消息。通過調用靜態(tài)方法SOAPConnectionFactory.newInstance(),可以容易地得到SOAPConnection對象。這種類型的連接既不保證可靠性也不保證安全性。

提供者連接

從ProviderConnectionFactory 獲得的ProviderConnection可以創(chuàng)建到特定消息提供者的連接。當使用提供者發(fā)送SOAP消息的時候,消息被傳遞給提供者,然后提供者負責 傳遞消息到它的最終目的地,這樣保證了可靠并且安全的消息傳輸。

創(chuàng)建SOAP客戶端

創(chuàng)建SOAP客戶端之前,確定你已經設置了客戶端環(huán)境。關于設置客戶端環(huán)境的更多信息,請參見

如果創(chuàng)建一個點對點客戶端,你必須導入SAAJ API的javax.xml.soap程序包。如果創(chuàng)建一個pub/sub客戶端,需要導入import JAXM API的javax.xml.messaging程序包。除此之外,你還必須導入以下程序包:

import java.net.*;
import java.io.*;
import java.util.*;

import javax.servlet.http.*;
import javax.servlet.*;

import javax.activation.*;
import javax.naming.*;

創(chuàng)建SOAP客戶端并訪問消息包括以下步驟:

獲得連接

單獨客戶端

不使用消息提供者的客戶端使用SOAPConnection對象創(chuàng)建連接。使用SoapConnection對象發(fā)送的消息直接從發(fā)送者到發(fā)送者指定的URL。

必須獲得一個SOAPConnectionFactory對象來創(chuàng)建連接。SAAJ API通過提供SOAPConnectionFactory類的一個默認實現(xiàn)簡化了這一過程。以下代碼演示了如何獲得該實現(xiàn)的一個實例:

SOAPConnectionFactory scf = SOAPConnectionFactory. newInstance();

現(xiàn)在,你可以使用scFactory創(chuàng)建SOAPConnection對象

SOAPConnection con = scf.createConnection();

創(chuàng)建消息

使用MessageFactory對象來創(chuàng)建消息。如果想要創(chuàng)建一個單獨客戶端,也就是既不使用消息提供者也不在容器中運行的客戶端,你可以使用SAAJ API提供的MessageFactory類的實現(xiàn)。以下代碼演示了如何獲得默認消息工廠的一個實例,然后用它創(chuàng)建消息:

MessageFactory mf = MessageFactory.newInstance();

SOAPMessage msg = mf.createMessage();

消息創(chuàng)建過程會完成SOAPPart的創(chuàng)建,它是SOAP 1.1規(guī)范中每個消息的必要部分。

SOAPPart sp = msg.getSOAPPart();


注意:

通常,使用默認的消息工廠創(chuàng)建消息。但是,你也可以編寫自己的消息工廠實現(xiàn),并且把它插入到系統(tǒng)屬性中,如下所示:

  • 通過擴展javax.xml.soap.MessageFactory實現(xiàn)消息工廠類。 javax.xml.soap是在SAAJ API中定義的程序包。
  • 通過設定系統(tǒng)屬性javax.xml.soap.MessageFactory為消息工廠實現(xiàn)類mypackage.MySOAPMessageFactoryImpl的完全路徑名,指定希望被實例化的消息工廠類。

關于SOAP消息結構和組成部分的信息,請參見

Header添加內容

創(chuàng)建一個SOAPHeaderElement對象,從而可以添加內容到header中。以下代碼演示了如何使用SOAPEnvelope對象創(chuàng)建一個SOAPHeaderElement。

SOAPHeader hdr = envelope.getHeader();

Name headerName = envelope.createName("Purchase Order","PO", "http://www.sonata.com/order");

SOAPHeaderElement headerElement = hdr.addHeaderElement(headerName);

HeaderElement通過Name對象headerName進行標識。AddHeaderElement方法是用來添加或者創(chuàng)建header元素的。

為了添加內容到headerElement,請象以下代碼示例那樣使用addTextNode方法。

headerElement.addTextNode("order");

SOAPHeader對象包含一個內容為"order"的SOAPHeaderElement對象。

向消息添加內容

你可以向SOAPPart對象,或者一或多個AttachmentPart對象添加內容,或者可以向消息的這兩個部分都添加內容。

為了向消息體添加內容,請創(chuàng)建一個SOAPBodyElement對象并添加一個使用SOAPElement.addTextNode方法建立的XML元素。下面的代碼演示了如何添加內容到消息:

SOAPEnvelope envelope = sp.getSOAPEnvelope();

SOAPBody bdy = envelope.getSOAPBody();

SOAPBodyElement gltp = bdy.addBodyElement(envelope.createName("GetLastTradePrice", "ztrade", "http://wombat.ztrade.com"));

gltp.addChildElement(envelope.createName("symbol","ztrade", "http://wombat.ztrade.com")).addTextNode("SUNW");;

代碼的前三行訪問了SOAPBody對象body,目的是創(chuàng)建一個新 SOAPBodyElement對象并把它添加到body上。CreateName方法需要Name對象作為參數(shù),用來指定被添加的 SOAPBodyElement。最后一行添加傳遞給addTextNode方法的XML字符串。

向消息添加一個附件

向消息添加附件的過程對于使用或不使用消息提供者的客戶端來說都是一樣的。使用AttachmentPart對象向消息中添加附件部分。

使用SOAPMessage對象創(chuàng)建AttachmentPart對象。SOAPMessage 類含有三個創(chuàng)建附件的方法。第一個方法允許你創(chuàng)建一個沒有內容的AttachmentPart。就是說,以后再使用AttachmentPart的方法 setContent來添加內容到附件。

URL url = new URL(data);

AttachmentPart ap = msg.createAttachmentPart(new DataHandler(url));

SetContent有兩個參數(shù),對應內容的Java對象以及標識內容類型的String對象。 內容是消息的SOAPBody部分,消息有一個值為"text/xml"的內容-類型(Content-Type)header,這是因為內容只能是 XML格式。在AttachmentPart中,內容的類型只能被指定為該對象能夠容納的任意類型。

每個AttachmentPart都有一個或多個與之相關的header。setContent 方法中用到的類型就是Content-Type這個header類型。這是唯一必須具備的header。你還可以設置其他可選的header,例如 Content-Id和Content-Location。為了方便,JAXM和SAAJ API為Content-type、 Content-Id、和Content-Location這幾個header提供了get和set方法。這些header在消息擁有多個附件的時候,可 以幫助對附件的訪問。

以下代碼演示了如何使用setContent方法:

String stringContent = "Update address for Sunny Skies " + "Inc., to 10 Upbeat Street, Pleasant Grove, CA 95439";

ap.setContent(stringContent, "text/html");
ap.setContentId("update_address");
msg.addAttachmentPart(ap);

如果你還想附加一個jpeg圖像,setContent方法的第二個參數(shù)必須被設為"image/jpeg"。下面的代碼演示了如何使用setContent方法附加圖片:

AttachmentPart ap2 = msg.createAttachmentPart();

byte[] jpegData = . . .;

ByteArrayInputStream stream = new ByteArrayInputStream(jpegData);

ap2.setContent(stream, "image/jpeg");

msg.addAttachmentPart(ap2);

AttachmentPart的另外兩個方法允許你創(chuàng)建帶內容的AttachmentPart對 象。其中一個與AttachmentPart.setContent方法很象。它需要一個包含內容的Java對象和一個指定內容類型的String作為參 數(shù)。對象可以是String、stream、 javax.xml.transform.Source對象、或  javax.activation.DataHandler對象。

另一個創(chuàng)建帶內容的AttachmentPart對象的方法需要一個DataHandler對象作為輸入參數(shù),它是JavaBeans激活框架(JAF)的一部分

以下代碼演示了如何在內容中使用DataHandler。首先為想要作為內容添加的文件創(chuàng)建一個java.net.URL對象。創(chuàng)建DataHandler對象,即javax.activation.DataHandler 對象dh,使用URL對象對其進行初始化,然后把dh傳遞給createAttachmentPart方法。

URL url = new URL("http://greatproducts.com/gizmos/img.jpg");
DataHandler dh = new DataHandler(url);
AttachmentPart ap = msg.createAttachmentPart(dh);
ap.setContentId("gyro_image")
msg.addAttachmentPart(ap);

發(fā)送消息

單獨客戶端

為了發(fā)送消息,單獨客戶端使用SOAPConnection的call方法。該方法需要兩個輸入參數(shù),要發(fā)送的消息和消息的目的地,目的地是一個包含接收者URL的Endpoint對象。

利用SoapConnection的情況下,使用javax.xml.soap.SOAPConnection.call()發(fā)送消息。

例如:

URL urlEndpoint = new URL(to);

SOAPMessage reply = con.call(msg, urlEndpoint);

從響應消息中檢索內容

客戶端使用onMessage方法檢索消息內容。客戶端通過消息得到envelope,再通過 envelope得到body,從而訪問SOAPBody對象。訪問SOAPBody對象是因為內容存放在該元素中。為了檢索由 Node.addTextNode方法添加的內容,請調用Node.getValue方法。GetValue返回調用元素的直接子元素的值。為了訪問 bodyElement,需要在body上調用getChildElement方法。以下代碼演示了如何從響應消息中檢索內容。

public SOAPMessage onMessage(SOAPMessage message)

{

SOAPEnvelop env = msg.getSOAPPart().getEnvelope();

env getBody()
   .addChildElement(env.createName("Response"))
   .addTextNode("This is a Response");

return msg;

}

想要從含有附件的消息中檢索內容,你需要訪問附件。沒有參數(shù)的情況 下,SOAPMessage.getAttachments方法返回指向所有AttachmentPart對象的java.util.Iterator對 象。以下代碼打印出了SOAPMessage對象消息中每一個AttachmentPart對象的內容。

java.util.Iterator it = message.getAttachments();

while (it.hasNext()) {

AttachmentPart attachment = (AttachmentPart)it.next();
Object content = attachment.getContent();
String id = attachment.getContentId();
System.out.print("Attachment " + id + " contains: " + content);
System.out.println("");

}

訪問消息的附件部分

當收到帶有附件的消息或是希望改變消息附件的時候,都需要訪問消息的附件。沒有附加信息的 SOAPMesssage.getAttachments方法返回指向消息中所有AttachmentPart對象的 java.util.Iterator對象。以下代碼演示了如何訪問附件從而獲得SOAPMessage對象消息中每個AttachmentPart對象 的內容。

java.util.Iterator it = msg.getAttachments();

while (it.hasNext()) {

AttachmentPart ap = it.next();
Object content = ap.getContent();
String id = ap.getContentId();
System.out.print("Attachment " + id + " contains: " + content);
System.out.println("");

}

組裝并部署SOAP客戶端

利用JAXM API和SAAJ API創(chuàng)建的應用程序被組裝為web應用(WAR)或者基于J2EE平臺的應用(EAR)。關于組裝和部署web應用,請參見Sun ONE Application Server開發(fā)人員web應用指南。

SOAP 服務


本節(jié)講述如何編寫SOAP服務以及如何在SOAP消息中處理異常和錯誤。本節(jié)講述以下主題:

創(chuàng)建SOAP服務

SOAP服務是SOAP消息的最終接收者,并且被實現(xiàn)為servlet。要么創(chuàng)建你自己的servlet,要么擴展javax.xml.messaging包中的JAXMServlet類。本節(jié)講述了基于JAXMServlet類創(chuàng)建SOAP服務的過程。

為了創(chuàng)建SOAP服務,你的servlet必須實現(xiàn)ReqRespListener或者OneWayListener接口。ReqRespListener需要返回一個回應。

public class MyServlet extends JAXMServlet implements ReqRespListener{

...

...

}

public SOAPMessage onMessage(SOAP Message msg)

使用任意借口,實現(xiàn)一個叫做onMessage(SOAPMsg)的方法。

以下代碼是使用JAXMServlet 的SOAP消費者的完整清單:

public class MyServlet extends JAXMServlet implements ReqRespListener {

   public SOAPMessage onMessage(SOAP Message msg) {

   //Process message here

   }
}

JAXMServlet在使用HTTP POST方法接受消息之后會調用onMessage。你就省去了實現(xiàn)自己的doPost()方法把收到的消息轉換成為SOAP消息的麻煩。

OnMessage方法需要分解由servlet傳入的SOAP消息并處理它的內容。處理消息包括訪問SOAP消息的組成部分。如果在處理消息過程中出現(xiàn)故障,服務需要創(chuàng)建SOAP fault對象并把它發(fā)回到客戶端。關于處理錯誤的更多信息,請參見

以下代碼演示了SOAP消息的處理:

{http://xml.coverpages.org/dom.html

SOAPEnvelope env = reply.getSOAPPart().getEnvelope();

SOAPBody sb = env.getBody();

// create Name object for XElement that we are searching for Name ElName = env.createName("XElement");

//Get child elements with the name XElement
Iterator it = sb.getChildElements( ElName );

//Get the first matched child element.
//We know there is only one.
SOAPBodyElement sbe = (SOAPBodyElement) it.next();

//Get the value for XElement
MyValue = sbe.getValue(); }

異常和錯誤處理

On the client's side, JAXM and SAAJ uses a SOAP exception to handle errors that occur during the generation of the SOAP request or unmarshalling of the response. This section describes the following topics:

在客戶端,JAXM和SAAJ使用SOAP異常來處理SOAP 請求生成過程中,或者響應反編組過程中發(fā)生的錯誤。本節(jié)講述以下主題:

錯誤處理

服務器端代碼必須使用SOAPFault對象處理在反編組請求、處理消息、或是編組響應過程中發(fā)生的錯誤。SOAPFault接口擴展了SOAPBodyElement接口。

在服務器端,SOAP消息擁有用來形成錯誤報告的特定元素和格式:SOAP消息的body可以包 含一個SOAPFault元素來報告發(fā)生在請求處理過程中的錯誤。在服務器端創(chuàng)建并且從服務器發(fā)回到客戶端的SOAP消息包含了SOAPFault對象, 它報告了消息生成者沒有預期到的任何行為。

SOAPFault元素定義了以下四個子元素

faultcode

標識錯誤的代碼。軟件使用該代碼為鑒別錯誤提供一個算法機制。此元素是必需的。

faultstring

一個描述錯誤代碼所標識的錯誤的字符串。該元素提供了為人們無法理解的錯誤提供了一個解釋。此元素是必需的。

faultactor

指定錯誤來源的URI:誰引起了錯誤。如果消息沒有通過任何中間站直接發(fā)送給它的最終目的地,該元素不是必需的。如果在中間站發(fā)生了錯誤,這個錯誤必須包含一個faultactor元素。

detail

該元素持有與body元素相關的特定信息。如果body元素的內容不能夠被成功處理,它就必須被給出。因此,如果這個元素丟失了,客戶端應該推斷出body元素已經被處理了。除了畸形負載,這個元素對任何錯誤都不是必須的,你可以在其他情況下用它來為客戶端提供附加信息。

預定義的錯誤代碼

SOAP規(guī)范列出了以下四個預定義的faultcode值:

VersionMismatch

處理方發(fā)現(xiàn)SOAP envelope元素有一個不合法的命名空間;也就是說,SOAPEnvelope元素的命名空間不是http://schemas.xmlsoap.org/soap/envelope/.

MustUnderstand

SOAPHeader元素的一個直接子元素要么無法理解,要么接收者不能正確處理。這個元素的MustUnderstand屬性設被為1(true)。

Client

消息格式不正確或者沒包含合適的信息。例如,消息沒有包含正確的認證或付款信息。客戶端應該翻譯這個代碼從而指定這個消息在重新發(fā)送之間必須被修改。如果這是一個返回代碼,SOAPFault對象應該包括一個detailEntry對象,它為格式錯誤的消息提供附加信息。

Server

該消息由于一些與它的內容沒有聯(lián)系的原因而不能被處理。例如,消息的一個處理者無法與另一個上游的、沒有相應的消息處理者進行通信。或者,服務器需要訪問的數(shù)據庫崩潰了。客戶端應該解釋這個錯誤,以指出事務可以在以后的某個及時時間點成功。

定義SOAP錯誤

可以使用SOAPFault對象的方法為faultcode、 faultstring、和faultctor指定值。以下代碼演示了SOAPFault對象的創(chuàng)建和faultcode、 faultstring、faultctor屬性的設定。

SOAPFault fault;

reply = factory.createMessage();

envp = reply.getSOAPPart().getEnvelope(true);

someBody = envp.getBody();

fault = someBody.addFault():

fault.setFaultCode("Server");

fault.setFaultString("Some Server Error");

fault.setFaultActor("http://xxx.me.com/list/endpoint.esp/");

reply.saveChanges();

一旦發(fā)生服務器錯誤,服務器能夠在對收到的SOAP消息做出的回應中,返回這個對象。

以下代碼演示了如何定義一個detail和detail entry對象。注意,必須為detail entry對象創(chuàng)建一個名稱。

SOAPFault fault = someBody.addFault();

fault.setFaultCode("Server");

fault.setFaultActor("http://foo.com/uri");

fault.setFaultString ("Unkown error");

DetailEntry entry = detail.addEntry(envelope.createName("125detail", "m", "Someuri");

entry.addTextNode("the message cannot contain the string //");

reply.saveChanges();

組裝并部署SOAP服務

使用JAXM API和SAAJ API創(chuàng)建的應用被組裝為web應用(WAR)或者基于J2EE平臺的應用(EAR)。關于組裝和部署web應用,請參見Sun ONE Application Server開發(fā)人員web應用指南。

客戶端和服務示例

客戶端和服務應用程序示例被捆綁在Sun ONE Application Server中。這些例子示范如何創(chuàng)建發(fā)送和接收XML消息的服務和客戶端。你可以在下面的位置找到這些例子:

install_dir/samples/webservices/jaxm

install_dir/imq/demo/jaxm

使用SAAJ 和JAXM的 SOAP客戶端及服務

816-7869-10

posted on 2012-06-22 16:10 大龍 閱讀(1209) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产高清aⅴ视频| 久久亚洲风情| 欧美福利一区二区三区| 另类图片国产| 亚洲丰满在线| 91久久国产综合久久| 一本久久综合| 亚洲欧美综合国产精品一区| 久久久精品一区| 欧美精品二区| 国产一区二区三区久久久久久久久 | 国产免费亚洲高清| 激情综合网址| 一区二区成人精品 | 欧美成人亚洲| 国产精品激情| 亚洲国产精品久久精品怡红院| 亚洲深夜福利| 久久综合伊人77777蜜臀| 亚洲第一页在线| 亚洲欧美激情诱惑| 欧美成年人网| 国产深夜精品福利| 中国成人亚色综合网站| 免费不卡亚洲欧美| 亚洲一区二区黄| 欧美大片在线观看| 韩国一区电影| 午夜精品在线视频| 亚洲日本精品国产第一区| 欧美一区二区三区免费看| 欧美日韩午夜激情| 亚洲国内精品在线| 乱码第一页成人| 香蕉久久夜色精品国产使用方法| 欧美日韩1234| 亚洲精品久久久久久一区二区 | 国产日韩一区二区三区在线播放| 在线观看日韩专区| 欧美天堂亚洲电影院在线观看| 亚洲精品视频二区| 日韩一级片网址| 国产午夜亚洲精品羞羞网站 | 亚洲第一精品夜夜躁人人躁| 久久久久久久久综合| 久久精品人人做人人爽| 亚洲欧美日韩精品| 欧美一级网站| 国产模特精品视频久久久久| 欧美国产精品中文字幕| 国产日本欧美视频| 亚洲影音先锋| 日韩午夜免费| 欧美激情一区二区三级高清视频| 尤物视频一区二区| 蜜桃av一区二区三区| 久久国产加勒比精品无码| 国产一区二区三区久久精品| 久久精品国内一区二区三区| 午夜日本精品| 国模精品一区二区三区色天香| 久久爱www.| 久久久99精品免费观看不卡| 伊人成人在线视频| 欧美成人精品不卡视频在线观看| 老司机午夜免费精品视频| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲国产精品久久久久| 欧美片在线观看| 亚洲欧美日韩在线| 欧美综合77777色婷婷| 亚洲电影免费观看高清| 亚洲精品无人区| 国产精品普通话对白| 久久久久五月天| 牛牛影视久久网| 99re8这里有精品热视频免费 | 亚洲一区二区三区影院| 国产人久久人人人人爽| 久久综合久色欧美综合狠狠 | 亚洲欧美国产精品桃花| 激情亚洲网站| 亚洲日本在线观看| 国产精品永久| 欧美激情91| 午夜精品久久久久| 亚洲乱码国产乱码精品精天堂| 亚洲精品一区二区三区av| 欧美色另类天堂2015| 久久久久久精| 欧美日韩成人激情| 久久久无码精品亚洲日韩按摩| 欧美高清在线视频| 久久久999精品| 欧美日韩一区二区三区四区五区| 久久精品青青大伊人av| 欧美日韩视频在线第一区| 久久这里只有精品视频首页| 欧美视频一区二区三区四区| 裸体素人女欧美日韩| 国产精品美女久久| 91久久亚洲| 亚洲国产精品日韩| 欧美一区二区三区播放老司机| 在线午夜精品自拍| 免费久久精品视频| 久久人人超碰| 国产精品视频观看| 亚洲日本va午夜在线电影| 国产真实乱偷精品视频免| 在线性视频日韩欧美| 亚洲欧洲日本在线| 久久精品视频在线看| 久久国产精品网站| 国产精品男gay被猛男狂揉视频| 亚洲激情欧美| 亚洲日本在线视频观看| 久久超碰97中文字幕| 亚洲一区精品视频| 欧美日韩国语| 亚洲精品一区二区网址| 亚洲精品极品| 欧美成人影音| 亚洲国产婷婷| 亚洲美女中出| 欧美人体xx| 9l国产精品久久久久麻豆| 一本久道久久综合狠狠爱| 欧美成人黑人xx视频免费观看 | 一区二区欧美亚洲| 一区二区三区欧美| 欧美日韩另类国产亚洲欧美一级| 亚洲娇小video精品| 日韩亚洲一区二区| 欧美日韩日韩| 一区二区三区国产盗摄| 亚洲伊人观看| 国产精品一区一区| 亚洲欧美日韩精品| 久久久久国产一区二区| 国外视频精品毛片| 久久深夜福利| 亚洲欧洲精品一区二区三区波多野1战4| 亚洲国产中文字幕在线观看| 欧美成人综合在线| 一区二区三区免费在线观看| 亚洲欧美日韩国产一区| 国产日韩欧美在线播放不卡| 欧美自拍偷拍午夜视频| 欧美激情在线| 亚洲小说欧美另类婷婷| 国产精品亚发布| 亚洲欧美综合v| 午夜精彩视频在线观看不卡| 国产精品视频1区| 午夜日韩av| 欧美电影打屁股sp| 99精品黄色片免费大全| 欧美视频在线观看一区| 欧美一区二区三区免费大片| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美天天在线| 小处雏高清一区二区三区| 免费在线日韩av| 在线一区视频| 精品成人久久| 国产精品jvid在线观看蜜臀| 久久精品日韩| 一本久久综合亚洲鲁鲁| 美国十次了思思久久精品导航| av成人福利| 韩国av一区二区三区| 欧美日韩一二三四五区| 欧美在线亚洲| 亚洲色无码播放| 欧美黄色免费| 久久久久久国产精品一区| 一区二区三区免费在线观看| 激情视频一区| 国产精品嫩草99av在线| 欧美不卡一区| 久久精品一区二区三区不卡牛牛| 一区二区三区|亚洲午夜| 麻豆国产精品777777在线| 亚洲免费在线| 99国产一区| 亚洲精华国产欧美| 国产综合色在线视频区| 国产精品久久久久久亚洲调教| 免费在线成人av| 久久精品国产v日韩v亚洲| 亚洲午夜小视频| 一本色道久久综合亚洲精品高清| 欧美成人综合| 牛牛国产精品| 免费不卡视频| 欧美超级免费视 在线| 久久久夜色精品亚洲| 欧美一区二区国产| 午夜精品视频在线|