ข้ามไปที่เนื้อหาหลัก

[ ServiceMix ] SOAP provider example

example files exists here or


ServiceMix can act as a SOAP server/provider of Chamber of Commerce.
Client --- SOAP -------> Server --- XML --> Server Stub unmarshal ( same interface as biz logic ) -----> Biz Logic Implementation ( Simple JavaCode )

Client <-- Response -- Server <--- XML -- Server Stub marshal <----- Biz Logic Implementation find companies at a specific city and specific street message
<findCompanies>
<city>city name</city>
<streetName>street name</streetName>
</findCompanies>


XMLSchema of message
<xsd:element name="findCompanies">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="city" type="xsd:string" />
<xsd:element name="streetName" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>


resources/cfx/wsdl/CoC.wsdl
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:osesb="http://opensource.esb.org/CoC/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="CoC"
targetNamespace="http://opensource.esb.org/CoC/">

<!-- We have three operations: changeCompany (in-only), findCompanies (in-out),
and getCompany (in-out). -->

<!-- Define an XML Schema for the elements use in the in and out SOAP messages. -->

<wsdl:types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://opensource.esb.org/CoC/">

<!-- define the elements which go into our methods -->

<xsd:element name="changeCompany">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="companyName" type="xsd:string" />
<xsd:element name="companyInfo" type="osesb:company" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>

<xsd:element name="findCompanies">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="city" type="xsd:string" />
<xsd:element name="streetName" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>

<xsd:element name="findCompaniesResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="companies" type="osesb:listOfCompanies"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

<xsd:element name="getCompany">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="companyName" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>

<xsd:element name="getCompanyResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="company" type="osesb:company" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>

<!-- define the types -->

<xsd:complexType name="listOfCompanies">
<xsd:sequence>
<xsd:element name="company" type="osesb:company" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="company">
<xsd:sequence>
<xsd:element name="name" type="xsd:string" />
<xsd:element name="boardOfDirectors" type="osesb:boardOfDirectors" />
<xsd:element name="address" type="osesb:address" />
</xsd:sequence>
<xsd:attribute name="cocID" type="xsd:string" />
</xsd:complexType>

<!-- Defines the board that manages this corporation -->
<xsd:complexType name="boardOfDirectors">
<xsd:sequence>
<xsd:element name="director" type="osesb:director" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>

<!-- Defines a single director -->
<xsd:complexType name="director">
<xsd:sequence>
<xsd:element name="firstName" type="xsd:string" />
<xsd:element name="lastName" type="xsd:string" />
<xsd:element name="dateOfBirth" type="xsd:date" />
<xsd:element name="address" type="osesb:address" />
</xsd:sequence>
</xsd:complexType>

<!-- defines a simple address -->
<xsd:complexType name="address">
<xsd:sequence>
<xsd:element name="street" type="xsd:string" />
<xsd:element name="number" type="xsd:integer" />
<xsd:element name="city" type="xsd:string" />
<xsd:element name="state" type="xsd:string" />
<xsd:element name="zipcode" type="osesb:zip" />
<xsd:element name="country" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>

<!-- defines the zip type -->
<xsd:simpleType name="zip">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9]{5}" />
</xsd:restriction>
</xsd:simpleType>

</xsd:schema>
</wsdl:types>

<!-- Define the SOAP messages needed for our three operations -->

<!-- The request for the changeCompany operation -->
<wsdl:message name="changeCompanyRequest">
<wsdl:part element="osesb:changeCompany" name="parameters" />
</wsdl:message>
<!-- The request for the findCompanies operation -->
<wsdl:message name="findCompaniesRequest">
<wsdl:part element="osesb:findCompanies" name="parameters" />
</wsdl:message>
<!-- The response for the findCompanies operation -->
<wsdl:message name="findCompaniesResponse">
<wsdl:part element="osesb:findCompaniesResponse" name="parameters" />
</wsdl:message>
<!-- The request for the getCompany operation -->
<wsdl:message name="getCompanyRequest">
<wsdl:part element="osesb:getCompany" name="parameters" />
</wsdl:message>
<!-- The response from the getCompanyOperation -->
<wsdl:message name="getCompanyResponse">
<wsdl:part element="osesb:getCompanyResponse" name="parameters" />
</wsdl:message>

<!-- Define the CoC interface/porttype, which pairs up the request/response
messages as needed and gives the operations their names. -->

<wsdl:portType name="CoCPortType">
<wsdl:operation name="changeCompany">
<wsdl:input message="osesb:changeCompanyRequest" />
</wsdl:operation>
<wsdl:operation name="findCompanies">
<wsdl:input message="osesb:findCompaniesRequest" />
<wsdl:output message="osesb:findCompaniesResponse" />
</wsdl:operation>
<wsdl:operation name="getCompany">
<wsdl:input message="osesb:getCompanyRequest" />
<wsdl:output message="osesb:getCompanyResponse" />
</wsdl:operation>
</wsdl:portType>

<!-- Specify "document/literal" binding, which allows arbitrary XML,
specified using XML Schema, to be passed as the SOAP body. Also
specify HTTP as the transport. -->

<wsdl:binding name="CoCSoapBinding" type="osesb:CoCPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<!-- alternative is style="RPC" -->

<wsdl:operation name="changeCompany">
<soap:operation soapAction="http://opensource.esb.org/CoC/changeCompany" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
</wsdl:operation>
<wsdl:operation name="findCompanies">
<soap:operation soapAction="http://opensource.esb.org/CoC/findCompanies" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getCompany">
<soap:operation soapAction="http://opensource.esb.org/CoC/getCompany" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>

<!-- And finally define the service endpoint -->

<wsdl:service name="CoCService">
<wsdl:port binding="osesb:CoCSoapBinding" name="CoCSoap">
<soap:address location="http://localhost:8080/services/coc" />
</wsdl:port>
</wsdl:service>

</wsdl:definitions>


download apache-cxf library
extract to ESB Folder
drag resources/example4-build.xml to ant-view
>> cxf-generate-server-stubs

it will create /src-generated
write our wsdl -> java class

/src/ChamberOfCommerceService.java
/src/ChamberOfCommerceServiceImpl.java


copy CoCPortTypeImpl.java to src-generated/


>>deploy-wsdl

and start ServiceMix
$ ESB/apache-servicemix-3.3/bin/servicemix


How to test ServiceMix
soapui
start
$ bin/soapui.sh


new project
insert : project name
select wsdl file :

You can request from findCompanies > Request 1.

you can also see from a serviceMix console.

ref : mdailey

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

เทคนิคคิดเลขเร็วโดยใช้ วิธีคิด แบบ เวทคณิต ( Vedic Mathematics example )

จากที่สงสัยเรื่อง ลูกคิด ของ จินตคณิต ที่ลองไปค้นดู
ปรากฎว่า เจอ เวทคณิต ซึ่งเขาบอกว่า อยู่ในคัมภีร์พระเวท

ลองอ่านดูแล้ว รู้สึกว่าฝึกสมอง ก็ทำให้คิดเลขเร็วดี
เลยสรุปมาให้ ตามนี้

Tutorial 1

การลบเลข
ALL FROM 9 AND THE LAST FROM 10
ทุกตัวลบจาก 9 และตัวสุดท้ายลบจาก 10

เช่น 1000 - 357 = 643
10,000 - 1,049 = 8951

ถ้า 1,000 - 83 ให้มองว่ามี 0 อยู่ข้างหน้า
เป็น
1,000 - 083 = 917

ฝึกบ่อยๆ ก็คล่อง แล้วก็ไม่ต้องใช้เครื่องคิดเลขด้วย
ลองทำดูสิ
1) 1000 - 777 =
2) 1000 - 283 =
3) 1000 - 505 =
4) 10,000 - 2345 =
5) 10,000 - 9876 =
6) 10,000 - 1011 =
7) 100 - 57 =
8) 1000 - 57 =
9) 10,000 - 321 =
10) 10,000 - 38 =

3,000 - 467 ก็ทำเหมือนกัน โดยลบตัวแรกสุดของ 3,000 ไป 1
จากนั้นก็ทำเหมือนเดิม จะได้ว่า 3,000 - 467 = 2,533

Tutorial 2
VERTICALLY AND CROSSWISE สำหรับตัวเลขที่น้อยกว่าฐานนิดหน่อย

ลอง 88x98

88 น้อยกว่า 100 อยู่ 12
98 น้อยกว่า 100 อยู่ 2
12x2 = 24
88-2 หรือ 98-12 ได้ 86
ดังนั้นตอบ 8,624

ดูอีกตัวอย่าง
หรือ

ลองทำนี่ดู
1) 87 x 98 =
2) 88 x 97 =
3) 77 x 98 =
4) 93 x 96 =
5) 94 x 9…

วิธีใช้ ย่อๆ เกี่ยวกับ Matrix กับ Vector ( มาจาก CASIO-991MS manual )

Matrix

เปลี่ยน mode เป็น Matrix
กด mode ไปเรื่อยๆ จนเจอ MAT

วิธีใส่ Matrix เข้าไป
จิ้ม MAT ( ตรงเลข 4 )
DIM -- สร้าง Matrix ใหม่ - เราจะสร้าง Matrix เก็บไว้ในตัวแปรได้สามตัว คือ A, B, C ( Trick : ตอนใส่ค่า a11, a12, .. ถ้าอยากข้ามไปให้กดลูกศร ขึ้น ลง ซ้าย ขวา ได้เลย )
รุ่นนี้ มันใส่ได้มากสุด 3x3 นะ ถ้าใส่ 4 ไป มันจะ dimension error
EDIT -- แก้ไข Matrix ที่สร้างไว้แล้ว
MAT -- เอา Matrix ออกมาใช้งาน

Add : MatA + MatB
Subtract : MatA - MatB
Multiply with scalar : MatA x 3 หรือ 3 x MatA
Multiply : MatA x MatB
Det : Det MatA
Transpost : Trn MatA
Inverse :MatA -1
Absolute Value of Each Element : Abs MatA

ผลลัพธ์มันจะได้เป็น
MatAns11
ซึ่งเราสามารถกด ซ้าย ขวา ขึ้นลงได้เหมือนเลื่อนดู Element จาก Matrix เลย

Vector
เปลี่ยน mode เป็น Vector
กด mode ไปเรื่อยๆ จนเจอ VCT

วิธีใส่ Vector เข้าไป
จิ้ม VCT ( ตรงเลข 5 )
DIM -- สร้าง Vector ใหม่ - เราจะสร้าง Vector เก็บไว้ในตัวแปรได้สามตัว คือ A, B, C ( Trick : ตอนใส่ค่า a1, a2, .. ถ้าอยากข้ามไปให้กดลูกศร ซ้าย ขวา ได้เลย )
EDIT -- แก้ไข Vector ที่สร้างไว้แล้ว
VCT -- เอา Vector ออกม…

อยู่เหงาๆ เราไปเที่ยว - วัดอรุณราชวราราม ( วัดแจ้ง ) + วัดสระเกศ ( ภูเขาทอง )

เอนทรีนี้เป็นส่วนหนึ่งของ serie ท่องเที่ยว ดูบทความท่องเที่ยว อื่นๆ ของผม ได้ที่ ลิงก์นี้ นะครับ

คำเตือน เอ็นทรีนี้รูปเยอะมากกกก ควรปิดบิตก่อนดู

ผ่างๆๆ ท่านสามารถรับชมเอนทรีนี้ผ่าน url http://tinyurl.com/goldenMount ได้ด้วย

วันนี้ตั้งใจไปวัดอรุณฯ

เดินทางทางน้ำเหมือนเดิม

แต่คราวนี้นั่งเรือ ธงสีฟ้า ( คราวก่อน นั่งเรือ ธงสีส้ม )

พอถึงท่าสาทร เขาบอกว่า ให้ลงลำที่จอดอยู่ได้เลย เก็บตังในเรือ

ก็ งงๆ เดินลงไป

เหมือนเดิมครับ

ชูชีพอยู่ใต้ที่นั่งของท่าน
พอเรือออกสักพัก มีไกด์ มาบรรยาย

อ้าว กรำ

ขึ้นผิดเรือรึเปล่า

นี่มันเรือท่องเที่ยว 150 บาท ไม่ใช่เร๊อะ

กะลังอึ้งๆอยู่

แต่พอไกด์พูดไปสักพัก ก็เลยรู้ว่า 150 บาท มันราคาเหมาวัน

แล้วก็ได้ความรู้ของท่าเรือ แล้วก็สองข้างทาง




เรือธงฟ้านี่มันไปสุดที่ท่าพระอาทิตย์เท่านั้นเองนะ แล้วก็กลับ

ตอนไปมีสาวคนนึง ถามว่า จะไปวัดสระเกศ ไปทางไหน

ถ้าฟังไม่ผิด คนเก็บตังบนเรือ บอกว่า ท่ามหาราช

จากนั้นก็คุยอะไรกันไม่รู้ ไม่ได้ยินแล้วล่ะ




เรือธงฟ้า มันใหญ่กว่า น่าหวาดเสียวน้อยกว่า น้ำกระเด็นน้อยกว่า แพงกว่า เรือธงสีส้ม

คราวนี้รู้และ นั่งริมฝั่งธน ได้มาหลายรูปเหมือนกัน แต่วันนี…