Java Eclipse Apache CXF ile SOAP WebServis yazma kodu kullanımı örneği (Java Eclipse Apache CXF ile SOAP WebService write code usage example)

buradaki adresten Apache CXF paketini indirip ilgili bir dizine bırakmalısınız İlk olarak Eclipse yapılandırmasında şu ayarı yapmalıyız; Eclipse-> Project-> Build Automatically seçilmiş olmalıdır. @WebService annotation ı kullandığınız veya WebService kaynağı göstermek istediğiniz sınıfa sağ tıklayıp-> Web Services-> Create Web Service-> Web service type-> Bottom up Java bean Web Service-> Service implementation-> WebServise sınıfının dizin yolu(Web Service class path)-> Develop service(Start Service i aşağıya çek, Develop Service’e kadar)-> Configuration:-> Server runtime: Tomcat vx.x Server-> Choose server first-> Tomcat vx.x Server at localhost-> OK-> Web Service runtime: Apache CXF 2.x-> Choose Web sevice runtime first-> Apache CXF 2.x-> OK-> varsa eğer Overwrite files without warning işaretlenmeli (clicked)-> Next-> Use a Service Endpoint Interface işaretlenmeli (clicked)-> (güncelleme için)Select an SEI işaretlenmeli veya (yeni oluşturmak için)Create an SEI-> (clicked) (daha önce oluşan SEI silinip yenidne oluşturulacak ise WSDL dosyasındaki wsdl:portType değeri olan SEI class adı öncekinin aynı olmalı ya da yeni oluşacak porttype adı için WS yayınınızı kullanan istemcilere WS’yi yeniden çekmeleri, içeri almalarını söylemelisiniz yoksa istemcileriniz WS’nize erişememeye başlar.)-> Select seçilmiş ise ->WebServise SEI nin dizin yolu (class SEI path)-> Next-> Create seçilmiş ise ->Member to declare in the extracted SEI: Select All-> Next-> Select the Methods to annotate: select @webMethod, @WebParam,@RequestWrapper,@ResponseWrapper,@WebResult Next-> Select seçilmiş ise -> Next-> Finish Create seçilmiş ise -> Default SOAP Binding SOAP 1.2-> Generate seperate XSD for the types işaretlenmemeli(not clicked)-> Next-> Finish İlgili WebService sınıfı dizininde SEI sınıfınız ve aynı dizin içindeki oluşan jaxws paketi altında ise Request ve Response objelerine ait sınıflar oluşacaktır. Bu işlemlerin sonunda ise IDE Console penceresinde aşağıdaki gibi çıktılar görürsünüz. [code language=”shell”] java2ws -cp D:\Java\workspace\eclipseWorkspace\gitWorkspace\YCNEInv\YCNEInv\YCNEInv\build\classes -s D:\Java\workspace\eclipseWorkspace\gitWorkspace\YCNEInv\YCNEInv\YCNEInv\.cxftmp/src -d D:\Java\workspace\eclipseWorkspace\gitWorkspace\YCNEInv\YCNEInv\YCNEInv\.cxftmp/wsdl -classdir D:\Java\workspace\eclipseWorkspace\gitWorkspace\YCNEInv\YCNEInv\YCNEInv\build\classes -o appresponse.wsdl -verbose -frontend jaxws -databinding jaxb -wsdl -wrapperbean tr.gv.gb.vdp3.einv.AppResp java2ws – Apache CXF 3.1.6 Tem 21, 2017 12:06:31 PM org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean buildServiceFromClass INFO: Creating Service {http://einv.vdp3.gb.gv.tr/}AppRespService from class tr.gv.gb.vdp3.einv.AppRespSEI11 [/code] Oluşmuş olan WebServis’teki request parametrelerin arg01 arg02 şeklinde oluşmasını istemiyorsanız WebServis oluşmuş olan SEI interface sınıfınızda ilgili parametrelerin @WebParam ek açıklama işareti (annotation) değerininn name niteliklerini arg0 dan istediğiniz parametre adına çevirmelisiniz ve sonrasında oluşturdugunuz wsdl dosyasını silip ve yine oluşmuş olan jaxws paketindeki @XmlRootElement ifadesi ile oluşan metod adınıza sahip Resuest sınıfını ve metod adı+Response şeklinde oluşan Response sınıflarınızı silip daha sonrasında WS generate işlemini tekrar başlatıp Create an SEI olarak değil Select an SEI seçeneği ile devam ederek ilerlemelisiniz. Bu işlemlerden sonra projenizde aşağıdaki bazı dosyalar oluşmalı ve mevcut dosyalrın içeriklerine ek satırlar gelmeli: – WebContent\wsdl\ dizininde endofdaystock.wsdl gibi sınıfınızın adı ile bir dosya oluşmalı. – WEB-INF\cxf-beans.xml adında dosya oluşmalı. hedef gösterdiğiniz paketin içerisinde – jaxws paketi oluşmalı ve içerisinde metodName.java ve methodNameResponse.java sınıfları oluşmalı – @WebService annotation’ına sahip kaynak sınıfınızın yanında sizin isimlendirdiğiniz mesela EndOfDayStockSEI12.java sınıfı oluşur. endofdaystock.wsdl [code language=”xml”] <?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions name="EndOfDayStockService" targetNamespace="http://endofday.stock.service.port.ws.core.eshop.yazilimcity.net/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://endofday.stock.service.port.ws.core.eshop.yazilimcity.net/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"> <wsdl:types> <xs:schema xmlns:tns="http://endofday.stock.service.port.ws.core.eshop.yazilimcity.net/" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" targetNamespace="http://endofday.stock.service.port.ws.core.eshop.yazilimcity.net/" version="1.0"> <xs:element name="checkConnection" type="tns:checkConnection"/> <xs:element name="checkConnectionResponse" type="tns:checkConnectionResponse"/> <xs:complexType name="checkConnection"> <xs:sequence/> </xs:complexType> <xs:complexType name="checkConnectionResponse"> <xs:sequence> <xs:element name="return" type="xs:boolean"/> </xs:sequence> </xs:complexType> </xs:schema> </wsdl:types> <wsdl:message name="checkConnectionResponse"> <wsdl:part name="parameters" element="tns:checkConnectionResponse"> </wsdl:part> </wsdl:message> <wsdl:message name="checkConnection"> <wsdl:part name="parameters" element="tns:checkConnection"> </wsdl:part> </wsdl:message> <wsdl:portType name="EndOfDayStockSEI12"> <wsdl:operation name="checkConnection"> <wsdl:input name="checkConnection" message="tns:checkConnection"> </wsdl:input> <wsdl:output name="checkConnectionResponse" message="tns:checkConnectionResponse"> </wsdl:output> </wsdl:operation> </wsdl:portType> <wsdl:binding name="EndOfDayStockServiceSoapBinding" type="tns:EndOfDayStockSEI12"> <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="checkConnection"> <soap12:operation soapAction="urn:CheckConnection" style="document"/> <wsdl:input name="checkConnection"> <soap12:body use="literal"/> </wsdl:input> <wsdl:output name="checkConnectionResponse"> <soap12:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="EndOfDayStockService"> <wsdl:port name="EndOfDayStockPort" binding="tns:EndOfDayStockServiceSoapBinding"> <soap12:address location="http://localhost:9090/EndOfDayStockPort"/> </wsdl:port> </wsdl:service> </wsdl:definitions> [/code] cxf-beans.xml [code language=”xml”] <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <!– <import resource="classpath:META-INF/cxf/cxf.xml" /> –> <!– <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> –> <!– <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> –> <jaxws:endpoint xmlns:tns="http://endofday.stock.service.port.ws.core.eshop.yazilimcity.net/" id="endofdaystock" implementor="com.btc.eshop.core.ws.port.service.stock.endofday.EndOfDayStock" wsdlLocation="wsdl/endofdaystock.wsdl" endpointName="tns:EndOfDayStockPort" serviceName="tns:EndOfDayStockService" address="/EndOfDayStockPort"> <jaxws:features> <bean class="org.apache.cxf.feature.LoggingFeature" /> </jaxws:features> </jaxws:endpoint> </beans> [/code] [code language=”java”] package net.yazilimcity.eshop.core.ws.port.service.stock.endofday; import javax.jws.WebService; @WebService(targetNamespace = "http://endofday.stock.service.port.ws.core.eshop.yazilimcity.net/", endpointInterface = "net.yazilimcity.eshop.core.ws.port.service.stock.endofday.EndOfDayStockSEI12", portName = "EndOfDayStockPort", serviceName = "EndOfDayStockService") public class EndOfDayStock implements EndOfDayStockSEI12 { public boolean checkConnection() { return true; } } [/code] [code language=”java”] package net.yazilimcity.eshop.core.ws.port.service.stock.endofday; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import javax.xml.ws.RequestWrapper; import javax.xml.ws.ResponseWrapper; @WebService(name = "EndOfDayStockSEI12", targetNamespace = "http://endofday.stock.service.port.ws.core.eshop.yazilimcity.net/") public interface EndOfDayStockSEI12 { @WebMethod(operationName = "checkConnection", action = "urn:CheckConnection") @RequestWrapper(className = "net.yazilimcity.eshop.core.ws.port.service.stock.endofday.jaxws.CheckConnection", localName = "checkConnection", targetNamespace = "http://endofday.stock.service.port.ws.core.eshop.yazilimcity.net/") @ResponseWrapper(className = "net.yazilimcity.eshop.core.ws.port.service.stock.endofday.jaxws.CheckConnectionResponse", localName = "checkConnectionResponse", targetNamespace = "http://endofday.stock.service.port.ws.core.eshop.yazilimcity.net/") @WebResult(name = "return") boolean checkConnection(); } [/code] [code language=”java”] package net.yazilimcity.eshop.core.ws.port.service.stock.endofday.jaxws; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; /** * This class was generated by Apache CXF 3.2.0 * Tue Jul 31 14:41:13 EET 2018 * Generated source version: 3.2.0 */ @XmlRootElement(name = "checkConnection", namespace = "http://endofday.stock.service.port.ws.core.eshop.yazilimcity.net/") @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "checkConnection", namespace = "http://endofday.stock.service.port.ws.core.eshop.yazilimcity.net/") public class CheckConnection { } [/code] [code language=”java”] package net.yazilimcity.eshop.core.ws.port.service.stock.endofday.jaxws; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; /** * This class was generated by Apache CXF 3.2.0 * Tue Jul 31 14:41:13 EET 2018 * Generated source version: 3.2.0 */ @XmlRootElement(name = "checkConnectionResponse", namespace = "http://endofday.stock.service.port.ws.core.eshop.yazilimcity.net/") @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "checkConnectionResponse", namespace = "http://endofday.stock.service.port.ws.core.eshop.yazilimcity.net/") public class CheckConnectionResponse { @XmlElement(name = "return") private boolean _return; public boolean getReturn() { return this._return; } public void setReturn(boolean new_return) { this._return = new_return; } } [/code]]]>

Leave a Reply

Your email address will not be published. Required fields are marked *