Repository: reficio/soap-ws
Branch: master
Commit: 93e5a7956ed6
Files: 549
Total size: 1.9 MB
Directory structure:
gitextract_cqglr56k/
├── .gitignore
├── .travis.yml
├── README.md
├── pom.xml
├── soap-builder/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── reficio/
│ │ │ └── ws/
│ │ │ └── builder/
│ │ │ ├── SoapBuilder.java
│ │ │ ├── SoapBuilderFinder.java
│ │ │ ├── SoapOperation.java
│ │ │ ├── SoapOperationBuilder.java
│ │ │ ├── SoapOperationFinder.java
│ │ │ └── core/
│ │ │ ├── SoapBuilderImpl.java
│ │ │ ├── SoapOperationFinderImpl.java
│ │ │ ├── SoapOperationImpl.java
│ │ │ ├── SoapUtils.java
│ │ │ └── Wsdl.java
│ │ └── resources/
│ │ └── xsds/
│ │ ├── XMLSchema.xsd
│ │ ├── soapEncoding.xsd
│ │ ├── soapEncoding12.xsd
│ │ ├── soapEnvelope.xsd
│ │ ├── soapEnvelope12.xsd
│ │ ├── swaref.xsd
│ │ ├── xmime200411.xsd
│ │ ├── xmime200505.xsd
│ │ ├── xml.xsd
│ │ └── xop.xsd
│ └── test/
│ ├── java/
│ │ └── org/
│ │ └── reficio/
│ │ └── ws/
│ │ └── builder/
│ │ ├── DefinitionSaveTest.java
│ │ ├── MessageComplianceTest.java
│ │ ├── ServiceComplianceTest.java
│ │ ├── SoapBuilderImplTest.java
│ │ ├── SoapOperationFinderImplTest.java
│ │ └── WsdlTest.java
│ └── resources/
│ ├── builder/
│ │ └── snowboard.wsdl
│ ├── log4j.xml
│ ├── messages/
│ │ ├── EmptyFault11.xml
│ │ ├── EmptyFault12.xml
│ │ ├── EmptyMessage11.xml
│ │ ├── EmptyMessage12.xml
│ │ ├── FaultVersionMismatch11.xml
│ │ └── FaultVersionMismatch12.xml
│ ├── services/
│ │ ├── test01/
│ │ │ ├── TestService.wsdl
│ │ │ ├── operations/
│ │ │ │ ├── TestServiceSoap/
│ │ │ │ │ ├── Copy.request.xml
│ │ │ │ │ ├── Copy.response.xml
│ │ │ │ │ ├── Delete.request.xml
│ │ │ │ │ ├── Delete.response.xml
│ │ │ │ │ ├── DeleteChildren.request.xml
│ │ │ │ │ ├── DeleteChildren.response.xml
│ │ │ │ │ ├── DeleteVersion.request.xml
│ │ │ │ │ ├── DeleteVersion.response.xml
│ │ │ │ │ ├── FindPagesWithCriteria.request.xml
│ │ │ │ │ ├── FindPagesWithCriteria.response.xml
│ │ │ │ │ ├── GetChildren.request.xml
│ │ │ │ │ ├── GetChildren.response.xml
│ │ │ │ │ ├── GetDefaultPageData.request.xml
│ │ │ │ │ ├── GetDefaultPageData.response.xml
│ │ │ │ │ ├── GetPage.request.xml
│ │ │ │ │ ├── GetPage.response.xml
│ │ │ │ │ ├── Move.request.xml
│ │ │ │ │ ├── Move.response.xml
│ │ │ │ │ ├── Ping.request.xml
│ │ │ │ │ ├── Ping.response.xml
│ │ │ │ │ ├── Save.request.xml
│ │ │ │ │ └── Save.response.xml
│ │ │ │ └── soap-version.txt
│ │ │ ├── readme.txt
│ │ │ ├── testservice1.xsd
│ │ │ └── testservice2.xsd
│ │ ├── test02/
│ │ │ ├── TestService.wsdl
│ │ │ ├── operations/
│ │ │ │ ├── TestServiceSoap/
│ │ │ │ │ ├── Copy.request.xml
│ │ │ │ │ ├── Copy.response.xml
│ │ │ │ │ ├── Delete.request.xml
│ │ │ │ │ ├── Delete.response.xml
│ │ │ │ │ ├── DeleteChildren.request.xml
│ │ │ │ │ ├── DeleteChildren.response.xml
│ │ │ │ │ ├── DeleteVersion.request.xml
│ │ │ │ │ ├── DeleteVersion.response.xml
│ │ │ │ │ ├── FindPagesWithCriteria.request.xml
│ │ │ │ │ ├── FindPagesWithCriteria.response.xml
│ │ │ │ │ ├── GetChildren.request.xml
│ │ │ │ │ ├── GetChildren.response.xml
│ │ │ │ │ ├── GetDefaultPageData.request.xml
│ │ │ │ │ ├── GetDefaultPageData.response.xml
│ │ │ │ │ ├── GetPage.request.xml
│ │ │ │ │ ├── GetPage.response.xml
│ │ │ │ │ ├── Move.request.xml
│ │ │ │ │ ├── Move.response.xml
│ │ │ │ │ ├── Ping.request.xml
│ │ │ │ │ ├── Ping.response.xml
│ │ │ │ │ ├── Save.request.xml
│ │ │ │ │ └── Save.response.xml
│ │ │ │ └── soap-version.txt
│ │ │ ├── readme.txt
│ │ │ ├── testservice1.xsd
│ │ │ └── testservice2.xsd
│ │ ├── test03/
│ │ │ ├── TestService.wsdl
│ │ │ ├── operations/
│ │ │ │ ├── TestServiceSoap/
│ │ │ │ │ ├── Copy.request.xml
│ │ │ │ │ ├── Copy.response.xml
│ │ │ │ │ ├── Delete.request.xml
│ │ │ │ │ ├── Delete.response.xml
│ │ │ │ │ ├── DeleteChildren.request.xml
│ │ │ │ │ ├── DeleteChildren.response.xml
│ │ │ │ │ ├── DeleteVersion.request.xml
│ │ │ │ │ ├── DeleteVersion.response.xml
│ │ │ │ │ ├── FindPagesWithCriteria.request.xml
│ │ │ │ │ ├── FindPagesWithCriteria.response.xml
│ │ │ │ │ ├── GetChildren.request.xml
│ │ │ │ │ ├── GetChildren.response.xml
│ │ │ │ │ ├── GetDefaultPageData.request.xml
│ │ │ │ │ ├── GetDefaultPageData.response.xml
│ │ │ │ │ ├── GetPage.request.xml
│ │ │ │ │ ├── GetPage.response.xml
│ │ │ │ │ ├── Move.request.xml
│ │ │ │ │ ├── Move.response.xml
│ │ │ │ │ ├── Ping.request.xml
│ │ │ │ │ ├── Ping.response.xml
│ │ │ │ │ ├── Save.request.xml
│ │ │ │ │ └── Save.response.xml
│ │ │ │ └── soap-version.txt
│ │ │ ├── readme.txt
│ │ │ ├── testservice1.xsd
│ │ │ └── testservice2.xsd
│ │ ├── test04/
│ │ │ ├── TestService.wsdl
│ │ │ ├── operations/
│ │ │ │ ├── TestServiceSoap/
│ │ │ │ │ ├── Copy.request.xml
│ │ │ │ │ ├── Copy.response.xml
│ │ │ │ │ ├── Delete.request.xml
│ │ │ │ │ ├── Delete.response.xml
│ │ │ │ │ ├── DeleteChildren.request.xml
│ │ │ │ │ ├── DeleteChildren.response.xml
│ │ │ │ │ ├── DeleteVersion.request.xml
│ │ │ │ │ ├── DeleteVersion.response.xml
│ │ │ │ │ ├── FindPagesWithCriteria.request.xml
│ │ │ │ │ ├── FindPagesWithCriteria.response.xml
│ │ │ │ │ ├── GetChildren.request.xml
│ │ │ │ │ ├── GetChildren.response.xml
│ │ │ │ │ ├── GetDefaultPageData.request.xml
│ │ │ │ │ ├── GetDefaultPageData.response.xml
│ │ │ │ │ ├── GetPage.request.xml
│ │ │ │ │ ├── GetPage.response.xml
│ │ │ │ │ ├── Move.request.xml
│ │ │ │ │ ├── Move.response.xml
│ │ │ │ │ ├── Ping.request.xml
│ │ │ │ │ ├── Ping.response.xml
│ │ │ │ │ ├── Save.request.xml
│ │ │ │ │ └── Save.response.xml
│ │ │ │ └── soap-version.txt
│ │ │ ├── readme.txt
│ │ │ ├── testservice1.xsd
│ │ │ └── testservice2.xsd
│ │ ├── test05/
│ │ │ ├── TestBinding.wsdl
│ │ │ ├── TestService.wsdl
│ │ │ ├── operations/
│ │ │ │ ├── TestServiceSoap/
│ │ │ │ │ ├── Copy.request.xml
│ │ │ │ │ ├── Copy.response.xml
│ │ │ │ │ ├── Delete.request.xml
│ │ │ │ │ ├── Delete.response.xml
│ │ │ │ │ ├── DeleteChildren.request.xml
│ │ │ │ │ ├── DeleteChildren.response.xml
│ │ │ │ │ ├── DeleteVersion.request.xml
│ │ │ │ │ ├── DeleteVersion.response.xml
│ │ │ │ │ ├── FindPagesWithCriteria.request.xml
│ │ │ │ │ ├── FindPagesWithCriteria.response.xml
│ │ │ │ │ ├── GetChildren.request.xml
│ │ │ │ │ ├── GetChildren.response.xml
│ │ │ │ │ ├── GetDefaultPageData.request.xml
│ │ │ │ │ ├── GetDefaultPageData.response.xml
│ │ │ │ │ ├── GetPage.request.xml
│ │ │ │ │ ├── GetPage.response.xml
│ │ │ │ │ ├── Move.request.xml
│ │ │ │ │ ├── Move.response.xml
│ │ │ │ │ ├── Ping.request.xml
│ │ │ │ │ ├── Ping.response.xml
│ │ │ │ │ ├── Save.request.xml
│ │ │ │ │ └── Save.response.xml
│ │ │ │ └── soap-version.txt
│ │ │ ├── readme.txt
│ │ │ ├── testservice1.xsd
│ │ │ └── testservice2.xsd
│ │ ├── test06/
│ │ │ ├── TestService.wsdl
│ │ │ ├── operations/
│ │ │ │ ├── TestServiceSoap/
│ │ │ │ │ ├── Copy.request.xml
│ │ │ │ │ ├── Copy.response.xml
│ │ │ │ │ ├── Delete.request.xml
│ │ │ │ │ ├── Delete.response.xml
│ │ │ │ │ ├── DeleteChildren.request.xml
│ │ │ │ │ ├── DeleteChildren.response.xml
│ │ │ │ │ ├── DeleteVersion.request.xml
│ │ │ │ │ ├── DeleteVersion.response.xml
│ │ │ │ │ ├── FindPagesWithCriteria.request.xml
│ │ │ │ │ ├── FindPagesWithCriteria.response.xml
│ │ │ │ │ ├── GetChildren.request.xml
│ │ │ │ │ ├── GetChildren.response.xml
│ │ │ │ │ ├── GetDefaultPageData.request.xml
│ │ │ │ │ ├── GetDefaultPageData.response.xml
│ │ │ │ │ ├── GetPage.request.xml
│ │ │ │ │ ├── GetPage.response.xml
│ │ │ │ │ ├── Move.request.xml
│ │ │ │ │ ├── Move.response.xml
│ │ │ │ │ ├── Ping.request.xml
│ │ │ │ │ ├── Ping.response.xml
│ │ │ │ │ ├── Save.request.xml
│ │ │ │ │ └── Save.response.xml
│ │ │ │ └── soap-version.txt
│ │ │ ├── readme.txt
│ │ │ └── wsdls/
│ │ │ ├── TestBinding.wsdl
│ │ │ └── xsds/
│ │ │ ├── sub/
│ │ │ │ └── testservice2.xsd
│ │ │ └── testservice1.xsd
│ │ ├── test07/
│ │ │ ├── TestService.wsdl
│ │ │ ├── operations/
│ │ │ │ ├── TestServiceSoap/
│ │ │ │ │ ├── Copy.request.xml
│ │ │ │ │ ├── Copy.response.xml
│ │ │ │ │ ├── Delete.request.xml
│ │ │ │ │ ├── Delete.response.xml
│ │ │ │ │ ├── DeleteChildren.request.xml
│ │ │ │ │ ├── DeleteChildren.response.xml
│ │ │ │ │ ├── DeleteVersion.request.xml
│ │ │ │ │ ├── DeleteVersion.response.xml
│ │ │ │ │ ├── FindPagesWithCriteria.request.xml
│ │ │ │ │ ├── FindPagesWithCriteria.response.xml
│ │ │ │ │ ├── GetChildren.request.xml
│ │ │ │ │ ├── GetChildren.response.xml
│ │ │ │ │ ├── GetDefaultPageData.request.xml
│ │ │ │ │ ├── GetDefaultPageData.response.xml
│ │ │ │ │ ├── GetPage.request.xml
│ │ │ │ │ ├── GetPage.response.xml
│ │ │ │ │ ├── Move.request.xml
│ │ │ │ │ ├── Move.response.xml
│ │ │ │ │ ├── Ping.request.xml
│ │ │ │ │ ├── Ping.response.xml
│ │ │ │ │ ├── Save.request.xml
│ │ │ │ │ └── Save.response.xml
│ │ │ │ └── soap-version.txt
│ │ │ ├── readme.txt
│ │ │ └── wsdls/
│ │ │ ├── TestBinding.wsdl
│ │ │ └── xsds/
│ │ │ ├── sub/
│ │ │ │ └── testservice2.xsd
│ │ │ └── testservice1.xsd
│ │ ├── test08/
│ │ │ ├── TestService.wsdl
│ │ │ ├── operations/
│ │ │ │ ├── TestServiceSoap/
│ │ │ │ │ ├── Copy.request.xml
│ │ │ │ │ ├── Copy.response.xml
│ │ │ │ │ ├── Delete.request.xml
│ │ │ │ │ ├── Delete.response.xml
│ │ │ │ │ ├── DeleteChildren.request.xml
│ │ │ │ │ ├── DeleteChildren.response.xml
│ │ │ │ │ ├── DeleteVersion.request.xml
│ │ │ │ │ ├── DeleteVersion.response.xml
│ │ │ │ │ ├── FindPagesWithCriteria.request.xml
│ │ │ │ │ ├── FindPagesWithCriteria.response.xml
│ │ │ │ │ ├── GetChildren.request.xml
│ │ │ │ │ ├── GetChildren.response.xml
│ │ │ │ │ ├── GetDefaultPageData.request.xml
│ │ │ │ │ ├── GetDefaultPageData.response.xml
│ │ │ │ │ ├── GetPage.request.xml
│ │ │ │ │ ├── GetPage.response.xml
│ │ │ │ │ ├── Move.request.xml
│ │ │ │ │ ├── Move.response.xml
│ │ │ │ │ ├── Ping.request.xml
│ │ │ │ │ ├── Ping.response.xml
│ │ │ │ │ ├── Save.request.xml
│ │ │ │ │ └── Save.response.xml
│ │ │ │ └── soap-version.txt
│ │ │ ├── readme.txt
│ │ │ └── wsdls/
│ │ │ ├── TestBinding.wsdl
│ │ │ ├── testservice2.xsd
│ │ │ └── xsds/
│ │ │ └── testservice1.xsd
│ │ ├── test09/
│ │ │ ├── TestService.wsdl
│ │ │ ├── common.xsd
│ │ │ ├── one.xsd
│ │ │ ├── operations/
│ │ │ │ ├── Binding/
│ │ │ │ │ ├── Operation.request.xml
│ │ │ │ │ └── Operation.response.xml
│ │ │ │ └── soap-version.txt
│ │ │ └── two.xsd
│ │ ├── test10/
│ │ │ ├── TestService.wsdl
│ │ │ ├── operations/
│ │ │ │ ├── TestServiceSoap/
│ │ │ │ │ ├── GetDefaultPageData.request.xml
│ │ │ │ │ ├── GetDefaultPageData.response.xml
│ │ │ │ │ ├── GetPage.request.xml
│ │ │ │ │ └── GetPage.response.xml
│ │ │ │ └── soap-version.txt
│ │ │ ├── readme.txt
│ │ │ ├── testservice1.xsd
│ │ │ └── testservice2.xsd
│ │ ├── test11/
│ │ │ ├── TestService.wsdl
│ │ │ ├── operations/
│ │ │ │ ├── ADEC_MAST_Binding/
│ │ │ │ │ ├── doGetSummary.request.xml
│ │ │ │ │ └── doGetSummary.response.xml
│ │ │ │ └── soap-version.txt
│ │ │ └── readme.txt
│ │ ├── test12/
│ │ │ ├── TestService.wsdl
│ │ │ ├── operations/
│ │ │ │ ├── IncrementServicePTSOAPBinding/
│ │ │ │ │ ├── process.request.xml
│ │ │ │ │ └── process.response.xml
│ │ │ │ └── soap-version.txt
│ │ │ └── readme.txt
│ │ ├── test13/
│ │ │ ├── TestService.wsdl
│ │ │ ├── chameleon.xsd
│ │ │ ├── operations/
│ │ │ │ ├── LinkageServiceSOAPBinding/
│ │ │ │ │ ├── addToSocialGroup.request.xml
│ │ │ │ │ ├── addToSocialGroup.response.xml
│ │ │ │ │ ├── createLink.request.xml
│ │ │ │ │ ├── createLink.response.xml
│ │ │ │ │ ├── createSocialGroup.request.xml
│ │ │ │ │ ├── createSocialGroup.response.xml
│ │ │ │ │ ├── readGroups.request.xml
│ │ │ │ │ └── readGroups.response.xml
│ │ │ │ ├── PersonaServiceSOAPBinding/
│ │ │ │ │ ├── deletePersona.request.xml
│ │ │ │ │ ├── deletePersona.response.xml
│ │ │ │ │ ├── readPersona.request.xml
│ │ │ │ │ ├── readPersona.response.xml
│ │ │ │ │ ├── readPersonas.request.xml
│ │ │ │ │ ├── readPersonas.response.xml
│ │ │ │ │ ├── storePersona.request.xml
│ │ │ │ │ └── storePersona.response.xml
│ │ │ │ └── soap-version.txt
│ │ │ └── readme.txt
│ │ ├── test14/
│ │ │ ├── TestService.wsdl
│ │ │ └── operations/
│ │ │ ├── MakeFriendsSoapBinding/
│ │ │ │ ├── makeFriend.request.xml
│ │ │ │ └── makeFriend.response.xml
│ │ │ └── soap-version.txt
│ │ ├── test15/
│ │ │ ├── TestService.wsdl
│ │ │ ├── operations/
│ │ │ │ ├── StockQuoteSoapBinding/
│ │ │ │ │ ├── GetLastTradePrice.request.xml
│ │ │ │ │ ├── GetLastTradePrice.response.xml
│ │ │ │ │ ├── GetLastTradePrice2.request.xml
│ │ │ │ │ └── GetLastTradePrice2.response.xml
│ │ │ │ └── soap-version.txt
│ │ │ └── stockquote-schema.xsd
│ │ ├── test16/
│ │ │ ├── TestService.wsdl
│ │ │ ├── operations/
│ │ │ │ ├── StockQuoteSoapBinding/
│ │ │ │ │ ├── GetLastTradePrice.request.xml
│ │ │ │ │ └── GetLastTradePrice.response.xml
│ │ │ │ └── soap-version.txt
│ │ │ └── stockquote-schema.xsd
│ │ ├── test17/
│ │ │ ├── TestService.wsdl
│ │ │ ├── operations/
│ │ │ │ ├── StockQuoteSoapBinding/
│ │ │ │ │ ├── GetLastTradePrice.request.xml
│ │ │ │ │ ├── GetLastTradePrice.response.xml
│ │ │ │ │ ├── GetLastTradePrice2.request.xml
│ │ │ │ │ └── GetLastTradePrice2.response.xml
│ │ │ │ └── soap-version.txt
│ │ │ └── stockquote-schema.xsd
│ │ └── test18/
│ │ ├── TestService.wsdl
│ │ └── operations/
│ │ ├── HelloWorldSoap/
│ │ │ ├── SayHelloWorld.request.xml
│ │ │ └── SayHelloWorld.response.xml
│ │ ├── HelloWorldSoap12/
│ │ │ ├── SayHelloWorld.request.xml
│ │ │ └── SayHelloWorld.response.xml
│ │ └── soap-version.txt
│ └── wsdl/
│ ├── TestService.wsdl
│ ├── testservice1.xsd
│ └── testservice2.xsd
├── soap-client/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── org/
│ │ └── reficio/
│ │ └── ws/
│ │ └── client/
│ │ ├── SoapClientException.java
│ │ ├── TransmissionException.java
│ │ ├── core/
│ │ │ ├── Security.java
│ │ │ ├── SecurityFactory.java
│ │ │ ├── SoapClient.java
│ │ │ ├── SoapClientFactory.java
│ │ │ └── SoapConstants.java
│ │ └── ssl/
│ │ ├── MultiX509TrustManager.java
│ │ └── SSLUtils.java
│ └── test/
│ ├── java/
│ │ └── org/
│ │ └── reficio/
│ │ └── ws/
│ │ └── client/
│ │ └── SimpleClientTest.java
│ └── resources/
│ └── log4j.xml
├── soap-common/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── org/
│ │ └── reficio/
│ │ └── ws/
│ │ ├── SoapBuilderException.java
│ │ ├── SoapContext.java
│ │ ├── SoapException.java
│ │ ├── SoapMultiValuesProvider.java
│ │ ├── SoapValidationException.java
│ │ ├── annotation/
│ │ │ └── ThreadSafe.java
│ │ └── common/
│ │ ├── FileWriter.java
│ │ ├── ResourceUtils.java
│ │ ├── SimpleValuesProvider.java
│ │ ├── Wsdl11Writer.java
│ │ └── XmlUtils.java
│ └── test/
│ ├── java/
│ │ └── org/
│ │ └── reficio/
│ │ └── ws/
│ │ └── common/
│ │ ├── ResourceLoaderTest.java
│ │ ├── ResourceUtilsTest.java
│ │ └── XmlComparator.java
│ └── resources/
│ ├── my folder/
│ │ └── resource.txt
│ └── org/
│ └── reficio/
│ └── ws/
│ └── common/
│ └── test/
│ └── soapEncoding.xsd
├── soap-examples/
│ ├── arquillian/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── reficio/
│ │ │ └── ws/
│ │ │ └── arquillian/
│ │ │ ├── Greeter.java
│ │ │ ├── GreeterTest.java
│ │ │ └── README.txt
│ │ └── resources/
│ │ ├── log4j.xml
│ │ └── wsdl/
│ │ └── currency-convertor.wsdl
│ ├── pom.xml
│ ├── quickstart/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── test/
│ │ ├── groovy/
│ │ │ └── org/
│ │ │ └── reficio/
│ │ │ └── ws/
│ │ │ └── quickstart/
│ │ │ └── QuickStart.groovy
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── reficio/
│ │ │ └── ws/
│ │ │ └── quickstart/
│ │ │ ├── SoapClientExamplesTest.java
│ │ │ ├── SoapServerExamplesTest.java
│ │ │ └── SpringExampleTest.java
│ │ └── resources/
│ │ ├── applicationContext.xml
│ │ ├── log4j.xml
│ │ └── wsdl/
│ │ ├── currency-convertor.wsdl
│ │ ├── stockquote-schema.xsd
│ │ └── stockquote-service.wsdl
│ └── testing/
│ ├── pom.xml
│ └── src/
│ └── test/
│ ├── groovy/
│ │ └── org/
│ │ └── reficio/
│ │ └── sample/
│ │ ├── BankService.groovy
│ │ ├── BankServiceImpl.groovy
│ │ ├── testing/
│ │ │ ├── BalanceClientPlainTest.groovy
│ │ │ ├── BalanceClientSpringTest.groovy
│ │ │ └── ConverterServerTest.groovy
│ │ └── util/
│ │ └── ExampleUtils.groovy
│ └── resources/
│ ├── applicationContext.xml
│ ├── log4j.xml
│ └── wsdl/
│ └── currency-convertor.wsdl
├── soap-it/
│ ├── pom.xml
│ └── src/
│ └── test/
│ ├── java/
│ │ └── org/
│ │ └── reficio/
│ │ └── ws/
│ │ └── it/
│ │ ├── AbstractCooperationTest.java
│ │ ├── HttpCooperationTest.java
│ │ ├── HttpProxyHttpCooperationTest.java
│ │ ├── HttpProxyHttpsCooperationTest.java
│ │ ├── HttpsCooperationTest.java
│ │ ├── HttpsProxyHttpCooperationTest.java
│ │ ├── HttpsProxyHttpsCooperationTest.java
│ │ └── util/
│ │ ├── ClientBuilder.java
│ │ ├── SslTunnel.java
│ │ └── TestUtils.java
│ └── resources/
│ ├── keystores/
│ │ ├── multi-cert-keystore/
│ │ │ ├── .keystore
│ │ │ └── gen.sh
│ │ └── single-cert-keystore/
│ │ ├── .keystore_1
│ │ ├── .keystore_2
│ │ └── gen.sh
│ ├── log4j.xml
│ ├── services/
│ │ ├── test01/
│ │ │ ├── TestService.wsdl
│ │ │ ├── testservice1.xsd
│ │ │ └── testservice2.xsd
│ │ ├── test02/
│ │ │ ├── TestService.wsdl
│ │ │ ├── testservice1.xsd
│ │ │ └── testservice2.xsd
│ │ ├── test03/
│ │ │ ├── TestService.wsdl
│ │ │ ├── testservice1.xsd
│ │ │ └── testservice2.xsd
│ │ ├── test04/
│ │ │ ├── TestService.wsdl
│ │ │ ├── testservice1.xsd
│ │ │ └── testservice2.xsd
│ │ ├── test05/
│ │ │ ├── TestBinding.wsdl
│ │ │ ├── TestService.wsdl
│ │ │ ├── testservice1.xsd
│ │ │ └── testservice2.xsd
│ │ ├── test06/
│ │ │ ├── TestService.wsdl
│ │ │ └── wsdls/
│ │ │ ├── TestBinding.wsdl
│ │ │ └── xsds/
│ │ │ ├── sub/
│ │ │ │ └── testservice2.xsd
│ │ │ └── testservice1.xsd
│ │ ├── test07/
│ │ │ ├── TestService.wsdl
│ │ │ └── wsdls/
│ │ │ ├── TestBinding.wsdl
│ │ │ └── xsds/
│ │ │ ├── sub/
│ │ │ │ └── testservice2.xsd
│ │ │ └── testservice1.xsd
│ │ ├── test08/
│ │ │ ├── TestService.wsdl
│ │ │ └── wsdls/
│ │ │ ├── TestBinding.wsdl
│ │ │ ├── testservice2.xsd
│ │ │ └── xsds/
│ │ │ └── testservice1.xsd
│ │ ├── test09/
│ │ │ ├── TestService.wsdl
│ │ │ ├── common.xsd
│ │ │ ├── one.xsd
│ │ │ └── two.xsd
│ │ ├── test10/
│ │ │ ├── TestService.wsdl
│ │ │ ├── testservice1.xsd
│ │ │ └── testservice2.xsd
│ │ ├── test11/
│ │ │ └── TestService.wsdl
│ │ ├── test12/
│ │ │ └── TestService.wsdl
│ │ ├── test13/
│ │ │ ├── TestService.wsdl
│ │ │ └── chameleon.xsd
│ │ ├── test14/
│ │ │ └── TestService.wsdl
│ │ ├── test15/
│ │ │ ├── TestService.wsdl
│ │ │ └── stockquote-schema.xsd
│ │ ├── test16/
│ │ │ ├── TestService.wsdl
│ │ │ └── stockquote-schema.xsd
│ │ ├── test17/
│ │ │ ├── TestService.wsdl
│ │ │ └── stockquote-schema.xsd
│ │ ├── test18/
│ │ │ └── TestService.wsdl
│ │ ├── test19/
│ │ │ └── TestService.wsdl
│ │ ├── test20/
│ │ │ └── TestService.wsdl
│ │ ├── test22/
│ │ │ └── TestService.wsdl
│ │ ├── test23/
│ │ │ └── TestService.wsdl
│ │ ├── test25/
│ │ │ ├── TestService.wsdl
│ │ │ └── info.txt
│ │ ├── test26/
│ │ │ └── TestService.wsdl
│ │ └── test27/
│ │ ├── TestService.wsdl
│ │ └── info.txt
│ └── wsdl/
│ ├── doc.literal/
│ │ ├── stockquote-schema.xsd
│ │ └── stockquote-ws.wsdl
│ ├── rpc.encoded/
│ │ ├── friend-ws.wsdl
│ │ ├── stockquote-schema.xsd
│ │ └── stockquote-ws.wsdl
│ └── rpc.literal/
│ ├── stockquote-schema.xsd
│ └── stockquote-ws.wsdl
├── soap-legacy/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── org/
│ │ └── reficio/
│ │ └── ws/
│ │ └── legacy/
│ │ ├── AbstractSoapVersion.java
│ │ ├── Constants.java
│ │ ├── DefinitionLoader.java
│ │ ├── SampleXmlUtil.java
│ │ ├── SchemaDefinitionWrapper.java
│ │ ├── SchemaLoader.java
│ │ ├── SchemaUtils.java
│ │ ├── SoapLegacyFacade.java
│ │ ├── SoapMessageBuilder.java
│ │ ├── SoapVersion.java
│ │ ├── SoapVersion11.java
│ │ ├── SoapVersion12.java
│ │ ├── UrlSchemaLoader.java
│ │ ├── WsdlContext.java
│ │ ├── WsdlSettings.java
│ │ ├── WsdlUtils.java
│ │ ├── WsdlValidator.java
│ │ └── XmlUtils.java
│ └── resources/
│ ├── license.txt
│ └── xsds/
│ ├── XMLSchema.xsd
│ ├── soapEncoding.xsd
│ ├── soapEncoding12.xsd
│ ├── soapEnvelope.xsd
│ ├── soapEnvelope12.xsd
│ ├── swaref.xsd
│ ├── xmime200411.xsd
│ ├── xmime200505.xsd
│ ├── xml.xsd
│ └── xop.xsd
├── soap-server/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── reficio/
│ │ │ └── ws/
│ │ │ └── server/
│ │ │ ├── OperationNotFoundException.java
│ │ │ ├── ServiceRegistrationException.java
│ │ │ ├── SoapServerException.java
│ │ │ ├── core/
│ │ │ │ ├── SoapServer.java
│ │ │ │ ├── SoapServerConstants.java
│ │ │ │ └── SoapServerFactory.java
│ │ │ ├── endpoint/
│ │ │ │ ├── ContextEndpointAdapter.java
│ │ │ │ ├── ContextPayloadEndpoint.java
│ │ │ │ ├── GenericContextDomEndpoint.java
│ │ │ │ ├── GenericEndpointMapping.java
│ │ │ │ └── GenericSoapMessage.java
│ │ │ ├── matcher/
│ │ │ │ ├── AggregatingVisitor.java
│ │ │ │ ├── BindingOperationVisitor.java
│ │ │ │ └── SoapOperationMatcher.java
│ │ │ ├── protocol/
│ │ │ │ ├── GenericSoapMessageFactory.java
│ │ │ │ ├── SimpleSoapProtocolChooser.java
│ │ │ │ └── SoapProtocolChooser.java
│ │ │ └── responder/
│ │ │ ├── AbstractResponder.java
│ │ │ ├── AutoResponder.java
│ │ │ └── RequestResponder.java
│ │ └── resources/
│ │ ├── soap-server.xml
│ │ └── soap-servlet.xml
│ └── test/
│ ├── java/
│ │ └── org/
│ │ └── reficio/
│ │ └── ws/
│ │ └── server/
│ │ ├── PasswordLessKeystoreTest.java
│ │ └── SimpleServerTest.java
│ └── resources/
│ ├── keystores/
│ │ ├── .keystore
│ │ ├── gen.sh
│ │ └── keyless.keystore
│ └── log4j.xml
├── soap-test/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── groovy/
│ │ │ └── org/
│ │ │ └── reficio/
│ │ │ └── ws/
│ │ │ └── test/
│ │ │ └── spock/
│ │ │ ├── Server.groovy
│ │ │ └── ServerExtension.groovy
│ │ └── java/
│ │ └── org/
│ │ └── reficio/
│ │ └── ws/
│ │ └── test/
│ │ ├── ServerProcessor.java
│ │ └── junit/
│ │ ├── Server.java
│ │ └── SoapRule.java
│ └── test/
│ ├── groovy/
│ │ └── org/
│ │ └── reficio/
│ │ └── ws/
│ │ └── test/
│ │ └── spock/
│ │ └── SpockExtensionTest.groovy
│ ├── java/
│ │ └── org/
│ │ └── reficio/
│ │ └── ws/
│ │ └── test/
│ │ └── junit/
│ │ └── SoapRuleTest.java
│ └── resources/
│ ├── log4j.xml
│ └── wsdl/
│ ├── TestService.wsdl
│ ├── currency-convertor.wsdl
│ ├── testservice1.xsd
│ └── testservice2.xsd
└── src/
├── main/
│ └── resources/
│ ├── findbugs-exclude.xml
│ └── license.txt
└── site/
├── fml/
│ └── faq.fml
└── site.xml
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
# Logs and databases #
######################
*.log
*.sql
*.sqlite
# OS generated files #
######################
.DS_Store?
ehthumbs.db
Icon?
Thumbs.db
# Custom #
######################
target
bin
classes
*.ipr
*.iws
*.iml
.svn
.classpath
.project
.idea
src/site/markdown/*.*
.DS_Store
================================================
FILE: .travis.yml
================================================
language: java
jdk:
- oraclejdk7
================================================
FILE: README.md
================================================
# soap-ws [](http://travis-ci.org/reficio/soap-ws)
## A lightweight and easy-to-use Java library to handle SOAP on a purely XML level.
### Intro
Welcome to soap-ws! This is a lightweight and easy-to-use Java library that wraps Spring-WS and enables handling SOAP on a purely XML level. soap-ws is based on four main abstractions:
* WsdlParser can easily parse your WSDL and produce SoapBuilders,
* SoapBuilder can generate SOAP messages directly in the XML format,
* SoapClient can be used to transmit a SOAP message over HTTP(s) to a web-service endpoint,
* SoapServer can be leveraged to process SOAP messages and and respond to them.
All of that requires no generation of stubs - everything happens directly in XML having - is the provider.
### Why should you use soap-ws?
Read this carefully and check if you know what we are talking about.
* Have you ever had problems with the versioning of web-service endpoints? Have you ever had to address the problem how to deal with many versions of the same classes generated from two versions of the same WSDL in one code base? Did you try to prefix the classes, change the package, or do any other mambo-jumbo tricks that are clearly against the best-practices of software design?
* Have you every tried to chain and orchestrate a few web-service invocations applying some XSLT transformation to the consecutive responses forwarding them to the next endpoint? Have you ever seen how cumbersome it is using Java generated ws clients/servers?
* Have you ever had to re-generate the ws-stubs, recompile and redeploy you application because of a tiny change in the WSDL?
* Have you every been confused why you generate all these domain and stub classes to invoke one simple web-service operation and to get a plain response that could be processed with XSTL one-liner?
* Have you ever had to had to send a simple XML message to a SOAP server in a fire and forget mode?
* Have you ever had to expose a mock SOAP endpoint that would respond to the request sending a sample response -let's say in an unit test?
* Have you ever had to download a hierarchical WSDL file with hierarchical XSD schemas and store it on your local hard drive with all the import and includes fixed properly so that you can reuse it locally?
* Have you ever…
Yes, that's what soap-ws can do for you. But it can do much more, just dive in and check the plethora of stuff that we have implemented.
### What is supported?
* supports WSDL 1.1
* supports SOAP 1.1 and 1.2
* supports all four WS flavors: rpc-encoded, rpc-literal, document-literal and document-encoded
* supports SSL and basic-authentication
* supports SOCKS, HTTP and HTTPS proxies
* supports SpringFramework
* supports JUnit, Spock and Arquillian
### Main features
soap-builder:
* fetch, parse and store WSDL (hierarchical WSDLs and XSDs supported)
* generate a soap XML message on the basis of the imported WSDL
soap-client:
* communication and message handling purely in the XML format
* basic authentication and SSL support
* HTTP(s) and SOCKS proxy support, with/without basic authentication
soap-server:
* endpoint exposition - communication and message handling purely in the XML format
* extensive operation matcher - validate and match a request to a BindingOperation from the WSDL
* auto-responder - respond to a soap request with a sample content
* HTTP and HTTPS support
### License
The project is open-source and distributed under the Apache license, Version 2.0.
One module (soap-legacy) is distributed under the LGPL 2.1 license (see the Note).
You can confidently use soap-ws in your commercial project.
## User Guide
### Quick-start
#### Add soap-ws to your maven project
In order to use soap-ws in your project you have to declare soap-ws in the dependencies section of your pom.xml. You can mix and match soap-builder, soap-client, soap-server artifacts, depending on the fact what you want to achieve.
```xml
org.reficiosoap-builder1.0.0-SNAPSHOTorg.reficiosoap-client1.0.0-SNAPSHOTorg.reficiosoap-server1.0.0-SNAPSHOT
```
soap-ws is not yet located in the central maven repo, thus you also have to add an additional repository to your config.
```xml
reficiohttp://repo.reficio.org/maven/
```
If you are a Gradle user you probably know how to do it :)
#### Consume a Web-Serivce in 60 seconds
Let's consume the CurrencyConverter Web-Service. Thanks to the fluent builders the API is straigtforward and intuitive.
Does it need any explanation? Welcome to soap-ws :)
```java
Wsdl wsdl = Wsdl.parse("http://www.webservicex.net/CurrencyConvertor.asmx?WSDL");
SoapBuilder builder = wsdl.binding()
.localPart("CurrencyConvertorSoap")
.find();
SoapOperation operation = builder.operation()
.soapAction("http://www.webserviceX.NET/ConversionRate")
.find();
Request request = builder.buildInputMessage(operation)
SoapClient client = SoapClient.builder()
.endpointUrl("http://www.webservicex.net/CurrencyConvertor.asmx")
.build();
String response = client.post(request);
```
#### Provide a Web-Service in 60 seconds
Let's provide the CurrencyConverter Web-Service that returns random results (compliant with the schema!).
```java
Wsdl wsdl = Wsdl.parse("http://www.webservicex.net/CurrencyConvertor.asmx?WSDL");
SoapBuilder builder = wsdl.binding()
.localPart("CurrencyConvertorSoap")
.find();
SoapServer server = SoapServer.builder()
.httpPort(9090)
.build();
server.registerRequestResponder("/currencyConvertor", new AutoResponder(builder));
server.start();
```
That's more or less what you need to generate a SOAP message and consume/provide a Web-Service.
### API
Let's have a closer look at the API and the main abstractions.
#### SoapBuilder
SoapBuilder interface describes the features of generation of XML SOAP messages. An instance of the SoapBuilder class is always bound to a specific wsdl file and one of its bindings. There can be more bindings in one WSDL file - in order to handle all of theme an instance of SoapBuilder is needed for every binding.
The simplest way to construct an instance of the Wsdl is to call the static factory method "parse", passing the URL of the WSDL file (1).
```java
Wsdl wsdl = Wsdl.parse(wsdlUrl); // (1)
List bindings = wsdl.getBindings(); // (2)
SoapBuilder builder = wsdl.binding().localPart("CurrencyConvertorSoap").find(); // (3)
wsdl.printBindings(); // (4)
List operations = builder.getOperations(); // (5)
SoapOperation operation = builder.operation().name("ConversionRate").find(); // (6)
```
Wsdl.parse(wsdlUrl) reads the specified WSDL file recursively, fetching all included WSDL and XSD files and constructs an underlying javax.wsdl.Definition object that is the Java-based representation of the WSDL (see WSDL4j to read more about the Definitoin object).
In order to generate a SOAP message you have to specify the Binding. To check what binding are defined in the WSDL invoke the getBindings() method (2). You can also use the binding finder, just call the binding() method and add additional parameters such as localPart(""), etc. Then invoke builder to get an instance of the SoapBuilder().
Finally, you can invoke the printBindings() method that will print all the binding to the stdout (just as a quick hack) (4).
The last step is to generate a SOAP message using the SoapBuilder. In order to do it though you have to specify the SOAP operation. In order to get the list of operations specified in that binding just invoke the getOperations() method on the SoapBuilder object (5). You can also use the SOAP operation finder - just call the operation() method and chain additional parameters such as name(), etc. Then call find() and get a reference to the Soap Operation.
Now you are all set. To generate a SOAP message in the XML format just invoke one of the methods defined in the SoapBuilder interface specifiying the SoapOperation. You can also build generic empty messages invoking buildEmptyMessage or buildFault:
```java
public interface SoapBuilder {
String buildInputMessage(SoapOperation operation);
String buildInputMessage(SoapOperation operation, SoapContext context);
String buildOutputMessage(SoapOperation operation);
String buildOutputMessage(SoapOperation operation, SoapContext context);
String buildFault(String code, String message);
String buildFault(String code, String message, SoapContext context);
String buildEmptyFault();
String buildEmptyFault(SoapContext context);
String buildEmptyMessage();
// (…)
}
```
Last, but not least. In most of the cases, you can relay on the default settings of the SoapContext that specifies how messages are generated, but if you would like to change it you have to populate the SoapContext object and pass it either to the Wsdl (from that moment on, SoapBuilder will use this context as the default one), or to single methods, changing the context of the generation for the time span of a single method invocation. In order to populate a SoapContext object use the fluent builder presented below.
```java
SoapContext context = SoapContext.builder()
.alwaysBuildHeaders(true)
.buildOptional(true)
.exampleContent(true)
.typeComment(true)
.skipComments(false)
.build();
```
#### SoapClient
You can create an instance of a soap-client using a fluent builder. If you want to use a plain HTTP connection without tweaking any advance options you are good to go with the following snippet:
```java
SoapClient client = SoapClient.builder()
.endpointUrl("http://example.com/endpoint")
.build();
```
Then, you can send a SOAP envelope (as a String) invoking the post() method:
```java
client.post(soapAction, envelope);
```
You can also skip the SOAPAction header and send the envelope only:
```java
client.post(envelope);
```
#### SoapServer
Use a similar builder to create an instance of the soap-server.
```java
SoapServer server = SoapServer.builder()
.httpPort(8080)
.build();
```
You can start and stop the server using start/stop methods
```java
server.start();
server.stop();
```
Now we would like to turn our server into a mock server that responds to request generating a sample content that is complaint with the schema of the operation that is being invoked.
To do that we have to create an AutoResponder and register it under the given context path.
Autoresponder requires a populated SoapBuilder instance (that contains the WSDL and the binding name which it should use). Keep in mind the there can be only one binding under one context path;
```java
String contextPath = "/exampleEndpoint";
AutoResponder responder = new AutoResponder(soapBuilder);
server.registerResponder(contextPath, responder);
```
From that moment our server will respond to request send to the "exampleEndpoint" context path.
If you would like to handle the request yourself you just have to implement the RequestResponder interface.
```java
public interface RequestResponder {
java.xml.Source respond(SoapMessage request);
}
```
It may be a bit cumbersome, as it is not that easy to match an XML request to the binding and operation, that is the reason why we provided an AbstractResponder that does all of that backstage.
```java
public abstract class AbstractResponder implements RequestResponder {
// (…)
/**
* Abstract method that should be implemented by overriding classes.
* This method is invoked whenever a request is send by the client.
* InvokedOperation may be passed to a SoapBuilder to construct the
* response to the request that was sent by the client.
*
* @param invokedOperation operation from the binding that is matched to the SOAP message
* @param message SOAP message passed by the client
* @return response in the XML source format containing the whole SOAP envelope
*/
public abstract Source respond(SoapOperation invokedOperation, SoapMessage message);
}
```
AbstractResponder does all the hard work for you to match the message to the BindingOperation from the WSDL. If it find it the respond() operation is invoked, if not a SOAP fault is send back to the client saying the operation has not been found.
AbstractResponder uses our implementation of the SoapOperationMatcher that matches the request to the operation in the following way:
* SOAP Action mapping
* RCP bindings are matched using single top-level tag with the name of the invoked operation
* Document bindings are matched by input types and then by input names
Having the SoapOperation object provided by the AbstractResponder you can easily generate and modify the response that you create using SoapBuilder that available in the responder as a instance field called builder.
That's a lot of stuff. I hope you enjoyed it! Have a look at the examples located in the soap-examples project. Try it out now and leave send us some feedback!
### Project modules
* soap-builder - responsible for the generation of SOAP XML messages.
* soap-client - responsible for the communication with a SOAP endpoint.
* soap-server - responsible for exposing SOAP endpoints and handling the requests.
* soap-it - contains integration tests - tests soap-client and soap-server in many tricky ways.
* soap-examples - contains a few example how to use soap-ws.
* soap-legacy - legacy code extracted from 3rd party projects
### Example usage
#### Generate and post a SOAP message
```java
Wsdl wsdl = Wsdl.parse("http://www.webservicex.net/CurrencyConvertor.asmx?WSDL");
SoapBuilder builder = wsdl.binding()
.localPart("CurrencyConvertorSoap")
.find();
SoapOperation operation = builder.operation()
.soapAction("http://www.webserviceX.NET/ConversionRate")
.find();
Request request = builder.buildInputMessage(operation)
SoapClient client = SoapClient.builder()
.endpointUrl("http://www.webservicex.net/CurrencyConvertor.asmx")
.build();
String response = client.post(request);
```
#### Create a SoapServer
```java
SoapServer server = SoapServer.builder()
.httpPort(9090)
.build();
server.start();
```
#### Create a SoapServer with AutoResponder (great to unit test web-services)
```java
SoapServer server = SoapServer.builder()
.httpPort(9090)
.build();
server.start();
URL wsdlUrl = ResourceUtils.getResourceWithAbsolutePackagePath("/", "wsdl/stockquote-service.wsdl");
Wsdl wsdl = Wsdl.parse(wsdlUrl);
SoapBuilder builder = wsdl.binding().localPart("StockQuoteSoapBinding").find();
AutoResponder responder = new AutoResponder(builder);
server.registerRequestResponder("/service", responder);
server.stop();
```
#### Create a SoapServer with a custom responder
```java
SoapServer server = SoapServer.builder()
.httpPort(9090)
.build();
server.start();
URL wsdlUrl = ResourceUtils.getResourceWithAbsolutePackagePath("/", "wsdl/stockquote-service.wsdl");
Wsdl wsdl = Wsdl.parse(wsdlUrl);
final SoapBuilder builder = wsdl.binding().localPart("StockQuoteSoapBinding").find();
AbstractResponder customResponder = new AbstractResponder(builder) {
@Override
public Source respond(SoapOperation invokedOperation, SoapMessage message) {
try {
// build the response using builder
String response = builder.buildOutputMessage(invokedOperation);
// here you can tweak the response -> for example with XSLT
//...
return XmlUtils.xmlStringToSource(response);
} catch (Exception e) {
// will automatically generate SOAP-FAULT
throw new RuntimeException("my custom error", e);
}
}
};
server.registerRequestResponder("/service", customResponder);
```
You can find all these working examples in the soap-examples project. Enjoy!
#### Spring example
Spring configuration:
```xml
wsdl/currency-convertor.wsdlhttp://www.webservicex.net/CurrencyConvertor.asmx?WSDL{http://www.webserviceX.NET/}CurrencyConvertorSoap
```
Then you can inject the beans to your code, for example in such a way:
```java
@Autowired
private SoapBuilder builder;
@Autowired
private SoapClient client;
@Autowired
private SoapServer server;
```
## Last but not least
### How can I hack around?
* GitHub -> https://github.com/reficio/soap-ws
* Jenkins -> https://reficio.ci.cloudbees.com/job/soap-ws/
* Site -> http://projects.reficio.org/soap-ws/1.0.0-SNAPSHOT/manual.html
### Who's behind it?
Tom Bujok [tom.bujok@gmail.com]
### History
This project was initially developed at centeractive ag for the purposes of the
open-sphere project. The library has been successfully incorporated into open-sphere
and that initial version could be found in the centeractive's repository at github.
Currently the project is developed and maintained solely by Tom Bujok at reficio.org
### Note
This project contains classes extracted from the soapUI code base by centeractive ag
in October 2011. They are located in the soap-legacy module. Every extracted class is
annotated with an comment to fulfill the requirements of the LGPL 2.1 license under
which soapUI is released. That is also the reason why soap-legacy module is
released under LGPL 2.1 license. All other soap-ws modules are released under Apache
v.2 license. The main reason behind the class extraction was to separate the code that
is responsible for the generation of the SOAP messages from the rest of the soapUI's
code that is tightly coupled with other modules, such as soapUI's graphical user
interface, etc. The goal was to create an open-source java project whose main
responsibility is to handle SOAP message generation and SOAP transmission purely on
an XML level.
centeractive ag would like to express strong appreciation to SmartBear Software and
to the whole team of soapUI's developers for creating soapUI and for releasing its
source code under a free and open-source license. centeractive ag extracted and
modified some parts of the soapUI's code in good faith, making every effort not
to impair any existing functionality and to supplement it according to our
requirements, applying best practices of software design.
[](https://bitdeli.com/free "Bitdeli Badge")
================================================
FILE: pom.xml
================================================
4.0.0org.reficiosoap-wspom1.0.0-SNAPSHOTsoap-ws
soap-ws is a lightweight and easy-to-use Java library to handle SOAP message generation and SOAP message transmission
on a purely XML level. With the usage of this library within few lines of code you can easily import your WSDL and generate
SOAP messages directly in an XML format. Then you can use the SoapClient to transmit this message over HTTP(s) to a web-service
endpoint. Finally, you can run SoapServer to receive SOAP messages and and respond to them. And all of that requires no classes
or stubs generation - everything happens directly in an XML format.
http://projects.reficio.org/soap-ws/${project.version}UTF-81.52.02.1.2soap-commonsoap-legacysoap-buildersoap-clientsoap-serversoap-itsoap-examplessoap-testThe Apache Software License, Version 2.0http://www.apache.org/licenses/LICENSE-2.0.txtrepo2012tom.bujokTom Bujoktom.bujok@gmail.comreficiohttp://www.reficio.orgproject leaddeveloper+1githubhttps://github.com/reficio/soap-ws/issuesscm:git:git://github.com/reficio/soap-ws.gitscm:git:git@github.com:reficio/soap-ws.githttp://github.com/reficio/soap-wsjenkinshttps://reficio.ci.cloudbees.com/job/soap-ws/org.apache.commonscommons-lang33.1commons-iocommons-io2.3commons-loggingcommons-logging1.1.1commons-codeccommons-codec1.6log4jlog4j1.2.17junitjunit4.11org.spockframeworkspock-core0.7-groovy-2.0com.googlecode.guava-osgiguava-osgi11.0.1org.apache.ws.commons.schemaXmlSchema1.4.5org.codehaus.gmaven.runtimegmaven-runtime-2.0${gmaven.version}org.codehaus.groovygroovy-allorg.codehaus.groovygroovy-all${groovy.version}maven-compiler-plugin2.5.11.61.6UTF-8org.codehaus.gmavengmaven-plugin${gmaven.version}${gmaven.provider.selection}UTF-8generateStubscompilegenerateTestStubstestCompileorg.codehaus.groovygroovy-all${groovy.version}com.mycila.maven-license-pluginmaven-license-plugin1.10.b1true${basedir}src/main/resources/license.txtfalsetruefalsesrc/****/test/**target/****/resources/**.clover/**trueXML_STYLEXML_STYLEJAVADOC_STYLEtrue${project.inceptionYear}-2013Reficio (TM) - Reestablish your software!UTF-8compilecheckorg.apache.felixmaven-bundle-plugin2.3.4truetrue${project.artifactId}${project.version}${project.artifactId}${project.groupId}.${project.artifactId}*!*
<_versionpolicy-impl>[$(version;==;$(@)),$(version;=+;$(@)))
<_versionpolicy-uses>[$(version;==;$(@)),$(version;+;$(@)))
<_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))
<_failok>false
org.apache.maven.pluginsmaven-jar-plugin2.3.1test-jarorg.apache.maven.pluginsmaven-source-plugin2.1.2attach-sourcesjarorg.apache.maven.pluginsmaven-javadoc-plugin2.8.1attach-javadocsjartrueorg.apache.maven.pluginsmaven-site-plugin3.1org.apache.maven.doxiadoxia-module-markdown1.3org.apache.maven.pluginsmaven-project-info-reports-plugin2.2falsefalseindexproject-teamhelpcimissue-trackinglicensescmsummaryorg.apache.maven.pluginsmaven-javadoc-plugin2.8.1org.apache.maven.pluginsmaven-jxr-plugin2.2truejxrtest-jxrcom.atlassian.maven.pluginsmaven-clover2-plugin3.1.7${user.home}/clover/soap-ws/cloverMerged.dborg.apache.maven.wagonwagon-ftp2.2org.apache.maven.wagonwagon-ssh2.2reficiohttp://repo.reficio.org/maven/eviwarehttp://www.eviware.com/repository/maven2/jbosshttps://repository.jboss.org/nexus/content/repositories/deprecated/servicemixhttp://svn.apache.org/repos/asf/servicemix/m2-repo/clovercom.atlassian.maven.pluginsmaven-clover2-plugin3.1.7${user.home}/clover/soap-ws/cloverMerged.dbtruetruetruetruesiteREADME.mdmaven-antrun-plugin1.7modify-markdownpre-sitefalserundefault-clirunorg.apache.antant-jsch1.8.4com.jcraftjsch0.1.48findbugsorg.codehaus.mojofindbugs-maven-plugin2.4.0findbugscompilefindbugstruesrc/main/resources/findbugs-exclude.xmlreficioReficio Maven Repositoryscp://${reficio.server}/var/www/repo/maven
================================================
FILE: soap-builder/pom.xml
================================================
4.0.0org.reficiosoap-builderbundlesoap-builder - XML based SOAP message generatororg.reficiosoap-ws1.0.0-SNAPSHOT../pom.xmlThe Apache Software License, Version 2.0http://www.apache.org/licenses/LICENSE-2.0.txtrepoorg.reficiosoap-common${project.version}org.reficiosoap-legacy${project.version}junitjunittestorg.apache.maven.pluginsmaven-site-plugin3.1true
================================================
FILE: soap-builder/src/main/java/org/reficio/ws/builder/SoapBuilder.java
================================================
/**
* Copyright (c) 2012-2013 Reficio (TM) - Reestablish your software!. All Rights Reserved.
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.reficio.ws.builder;
import org.reficio.ws.SoapContext;
import javax.wsdl.Binding;
import javax.xml.namespace.QName;
import java.util.List;
/**
* @author Tom Bujok
* @since 1.0.0
*/
public interface SoapBuilder {
List getOperations();
SoapOperationFinder operation();
SoapContext getContext();
SoapOperationBuilder getOperationBuilder(SoapOperation operation);
String buildInputMessage(SoapOperation operation);
String buildInputMessage(SoapOperation operation, SoapContext context);
String buildOutputMessage(SoapOperation operation);
String buildOutputMessage(SoapOperation operation, SoapContext context);
String buildFault(String code, String message);
String buildFault(String code, String message, SoapContext context);
String buildEmptyFault();
String buildEmptyFault(SoapContext context);
String buildEmptyMessage();
String buildEmptyMessage(SoapContext context);
QName getBindingName();
Binding getBinding();
List getServiceUrls();
void validateInputMessage(SoapOperation operation, String message);
void validateInputMessage(SoapOperation operation, String message, boolean strict);
void validateOutputMessage(SoapOperation operation, String message);
void validateOutputMessage(SoapOperation operation, String message, boolean strict);
boolean isRpc();
boolean isInputSoapEncoded(SoapOperation operation);
boolean isOutputSoapEncoded(SoapOperation operation);
}
================================================
FILE: soap-builder/src/main/java/org/reficio/ws/builder/SoapBuilderFinder.java
================================================
/**
* Copyright (c) 2012-2013 Reficio (TM) - Reestablish your software!. All Rights Reserved.
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.reficio.ws.builder;
import org.reficio.ws.SoapContext;
import javax.xml.namespace.QName;
/**
* @author Tom Bujok
* @since 1.0.0
*/
public interface SoapBuilderFinder {
SoapBuilderFinder name(String name);
SoapBuilderFinder name(QName name);
SoapBuilderFinder namespaceURI(String namespaceURI);
SoapBuilderFinder localPart(String localPart);
SoapBuilderFinder prefix(String prefix);
SoapBuilder find();
SoapBuilder find(SoapContext context);
}
================================================
FILE: soap-builder/src/main/java/org/reficio/ws/builder/SoapOperation.java
================================================
/**
* Copyright (c) 2012-2013 Reficio (TM) - Reestablish your software!. All Rights Reserved.
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.reficio.ws.builder;
import javax.xml.namespace.QName;
/**
* Wrapper object that represents one operation from a WSDL's binding
*
* @author Tom Bujok
* @since 1.0.0
*/
public interface SoapOperation {
QName getBindingName();
String getOperationName();
String getOperationInputName();
String getOperationOutputName();
String getSoapAction();
boolean isRpc();
boolean isInputSoapEncoded();
boolean isOutputSoapEncoded();
}
================================================
FILE: soap-builder/src/main/java/org/reficio/ws/builder/SoapOperationBuilder.java
================================================
/**
* Copyright (c) 2012-2013 Reficio (TM) - Reestablish your software!. All Rights Reserved.
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.reficio.ws.builder;
import org.reficio.ws.SoapContext;
/**
* @author Tom Bujok
* @since 1.0.0
*/
public interface SoapOperationBuilder extends SoapOperation {
void setContext(SoapContext context);
SoapContext getContext();
String buildInputMessage();
String buildInputMessage(SoapContext context);
String buildOutputMessage();
String buildOutputMessage(SoapContext context);
String buildFault(String code, String message);
String buildFault(String code, String message, SoapContext context);
String buildEmptyFault();
String buildEmptyFault(SoapContext context);
String buildEmptyMessage();
String buildEmptyMessage(SoapContext context);
void validateInputMessage(String message);
void validateInputMessage(String message, boolean strict);
void validateOutputMessage(String message);
void validateOutputMessage(String message, boolean strict);
}
================================================
FILE: soap-builder/src/main/java/org/reficio/ws/builder/SoapOperationFinder.java
================================================
/**
* Copyright (c) 2012-2013 Reficio (TM) - Reestablish your software!. All Rights Reserved.
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.reficio.ws.builder;
import org.reficio.ws.SoapContext;
/**
* @author Tom Bujok
* @since 1.0.0
*/
public interface SoapOperationFinder {
SoapOperationFinder name(String operationName);
SoapOperationFinder soapAction(String soapAction);
SoapOperationFinder inputName(String inputName);
SoapOperationFinder outputName(String inputName);
SoapOperationBuilder find();
SoapOperationBuilder find(SoapContext context);
}
================================================
FILE: soap-builder/src/main/java/org/reficio/ws/builder/core/SoapBuilderImpl.java
================================================
/**
* Copyright (c) 2012-2013 Reficio (TM) - Reestablish your software!. All Rights Reserved.
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.reficio.ws.builder.core;
import org.reficio.ws.SoapBuilderException;
import org.reficio.ws.SoapContext;
import org.reficio.ws.builder.SoapBuilder;
import org.reficio.ws.builder.SoapOperation;
import org.reficio.ws.builder.SoapOperationBuilder;
import org.reficio.ws.builder.SoapOperationFinder;
import org.reficio.ws.legacy.SoapLegacyFacade;
import javax.wsdl.Binding;
import javax.wsdl.BindingOperation;
import javax.wsdl.Port;
import javax.wsdl.Service;
import javax.xml.namespace.QName;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* @author Tom Bujok
* @since 1.0.0
*/
class SoapBuilderImpl implements SoapBuilder {
private final SoapLegacyFacade soapFacade;
private final Binding binding;
private final SoapContext context;
private final List serviceUrls;
SoapBuilderImpl(SoapLegacyFacade soapFacade, Binding binding, SoapContext context) {
this.soapFacade = soapFacade;
this.binding = binding;
this.context = context;
this.serviceUrls = new ArrayList();
initializeServiceUrls();
}
@SuppressWarnings("unchecked")
private void initializeServiceUrls() {
for (Service service : soapFacade.getServices()) {
for (Port port : (Collection) service.getPorts().values()) {
String address = SoapLegacyFacade.getSoapEndpoint(port);
if (address != null) {
serviceUrls.add(address);
}
}
}
}
public BindingOperation getBindingOperation(SoapOperation op) {
BindingOperation operation = binding.getBindingOperation(op.getOperationName(),
op.getOperationInputName(), op.getOperationOutputName());
if (operation == null) {
throw new SoapBuilderException("Operation not found");
}
return operation;
}
@Override
@SuppressWarnings("unchecked")
public List getOperations() {
List operationNames = new ArrayList();
for (BindingOperation operation : (List) binding.getBindingOperations()) {
operationNames.add(SoapOperationImpl.create(this, binding, operation));
}
return operationNames;
}
@Override
public SoapContext getContext() {
return context;
}
@Override
public SoapOperationBuilder getOperationBuilder(SoapOperation operation) {
BindingOperation bindingOperation = getBindingOperation(operation);
return SoapOperationImpl.create(this, binding, bindingOperation);
}
@Override
public SoapOperationFinder operation() {
return new SoapOperationFinderImpl(this, binding);
}
@Override
public String buildInputMessage(SoapOperation operation) {
return buildInputMessage(operation, context);
}
@Override
public String buildInputMessage(SoapOperation operation, SoapContext context) {
try {
return soapFacade.buildSoapMessageFromInput(binding, getBindingOperation(operation), context);
} catch (Exception e) {
throw new SoapBuilderException(e);
}
}
@Override
public String buildOutputMessage(SoapOperation operation) {
return buildOutputMessage(operation, context);
}
@Override
public String buildOutputMessage(SoapOperation operation, SoapContext context) {
try {
return soapFacade.buildSoapMessageFromOutput(binding, getBindingOperation(operation), context);
} catch (Exception e) {
throw new SoapBuilderException(e);
}
}
@Override
public String buildFault(String code, String message) {
return soapFacade.buildFault(code, message, binding, context);
}
@Override
public String buildFault(String code, String message, SoapContext context) {
return soapFacade.buildFault(code, message, binding, context);
}
@Override
public String buildEmptyFault() {
return soapFacade.buildEmptyFault(binding, context);
}
@Override
public String buildEmptyFault(SoapContext context) {
return soapFacade.buildEmptyFault(binding, context);
}
@Override
public String buildEmptyMessage() {
return soapFacade.buildEmptyMessage(binding, context);
}
@Override
public String buildEmptyMessage(SoapContext context) {
return soapFacade.buildEmptyMessage(binding, context);
}
@Override
public QName getBindingName() {
return binding.getQName();
}
@Override
public Binding getBinding() {
return binding;
}
@Override
public List getServiceUrls() {
return new ArrayList(serviceUrls);
}
@Override
public void validateInputMessage(SoapOperation operation, String message) {
BindingOperation bindingOperation = getBindingOperation(operation);
soapFacade.validateSoapRequestMessage(binding, bindingOperation, message, false);
}
@Override
public void validateInputMessage(SoapOperation operation, String message, boolean strict) {
BindingOperation bindingOperation = getBindingOperation(operation);
soapFacade.validateSoapRequestMessage(binding, bindingOperation, message, strict);
}
@Override
public void validateOutputMessage(SoapOperation operation, String message) {
BindingOperation bindingOperation = getBindingOperation(operation);
soapFacade.validateSoapResponseMessage(binding, bindingOperation, message, false);
}
@Override
public void validateOutputMessage(SoapOperation operation, String message, boolean strict) {
BindingOperation bindingOperation = getBindingOperation(operation);
soapFacade.validateSoapResponseMessage(binding, bindingOperation, message, strict);
}
@Override
public boolean isRpc() {
return SoapLegacyFacade.isRpc(binding);
}
@Override
public boolean isInputSoapEncoded(SoapOperation operation) {
return soapFacade.isInputSoapEncoded(getBindingOperation(operation));
}
@Override
public boolean isOutputSoapEncoded(SoapOperation operation) {
return soapFacade.isOutputSoapEncoded(getBindingOperation(operation));
}
}
================================================
FILE: soap-builder/src/main/java/org/reficio/ws/builder/core/SoapOperationFinderImpl.java
================================================
/**
* Copyright (c) 2012-2013 Reficio (TM) - Reestablish your software!. All Rights Reserved.
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.reficio.ws.builder.core;
import com.google.common.base.Preconditions;
import org.reficio.ws.SoapBuilderException;
import org.reficio.ws.SoapContext;
import org.reficio.ws.builder.SoapBuilder;
import org.reficio.ws.builder.SoapOperationBuilder;
import org.reficio.ws.builder.SoapOperationFinder;
import javax.wsdl.Binding;
import javax.wsdl.BindingOperation;
import java.util.ArrayList;
import java.util.List;
/**
* @author Tom Bujok
* @since 1.0.0
*/
class SoapOperationFinderImpl implements SoapOperationFinder {
private final Binding binding;
private String operationName;
private String operationInputName;
private String operationOutputName;
private String soapAction;
private SoapBuilder builder;
SoapOperationFinderImpl(SoapBuilder builder, Binding binding) {
this.binding = binding;
this.builder = builder;
}
@Override
public SoapOperationFinder name(String operationName) {
Preconditions.checkNotNull(operationName);
this.operationName = operationName;
return this;
}
@Override
public SoapOperationFinder soapAction(String soapAction) {
Preconditions.checkNotNull(soapAction);
this.soapAction = soapAction;
return this;
}
@Override
public SoapOperationFinder inputName(String inputName) {
Preconditions.checkNotNull(inputName);
this.operationInputName = inputName;
return this;
}
@Override
public SoapOperationFinder outputName(String outputName) {
Preconditions.checkNotNull(outputName);
this.operationOutputName = outputName;
return this;
}
@Override
@SuppressWarnings("unchecked")
public SoapOperationBuilder find() {
validateInput();
List found = new ArrayList();
for (BindingOperation operation : (List) binding.getBindingOperations()) {
boolean condition = true;
condition &= checkOperationName(operation);
condition &= checkSoapAction(operation);
condition &= checkOperationInputName(operation);
condition &= checkOperationOutputName(operation);
if(condition) {
found.add(SoapOperationImpl.create(builder, binding, operation));
if(found.size() > 1) {
throw new SoapBuilderException("Operation not unique - found more than one operation");
}
}
}
if(found.isEmpty()) {
throw new SoapBuilderException("Found no operations");
}
return found.iterator().next();
}
@Override
public SoapOperationBuilder find(SoapContext context) {
SoapOperationBuilder builder = find();
builder.setContext(context);
return builder;
}
private void validateInput() {
boolean failed = true;
failed &= this.operationName == null;
failed &= this.soapAction == null;
failed &= this.operationInputName == null;
failed &= this.operationOutputName == null;
if(failed) {
throw new IllegalArgumentException("All finder properties cannot be null");
}
}
private boolean checkOperationName(BindingOperation op) {
if (this.operationName != null) {
return this.operationName.equals(op.getOperation().getName());
}
return true;
}
private boolean checkSoapAction(BindingOperation op) {
if (this.soapAction != null) {
return this.soapAction.equals(SoapUtils.getSOAPActionUri(op));
}
return true;
}
private boolean checkOperationInputName(BindingOperation op) {
if (this.operationInputName != null) {
return this.operationInputName.equals(op.getOperation().getInput().getName());
}
return true;
}
private boolean checkOperationOutputName(BindingOperation op) {
if (this.operationOutputName != null) {
return this.operationOutputName.equals(op.getOperation().getOutput().getName());
}
return true;
}
}
================================================
FILE: soap-builder/src/main/java/org/reficio/ws/builder/core/SoapOperationImpl.java
================================================
/**
* Copyright (c) 2012-2013 Reficio (TM) - Reestablish your software!. All Rights Reserved.
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.reficio.ws.builder.core;
import org.reficio.ws.SoapContext;
import org.reficio.ws.builder.SoapBuilder;
import org.reficio.ws.builder.SoapOperation;
import org.reficio.ws.builder.SoapOperationBuilder;
import javax.wsdl.Binding;
import javax.wsdl.BindingOperation;
import javax.xml.namespace.QName;
/**
* @author Tom Bujok
* @since 1.0.0
*/
class SoapOperationImpl implements SoapOperation, SoapOperationBuilder {
private final QName bindingName;
private final String operationName;
private final String operationInputName;
private final String operationOutputName;
private final String soapAction;
private final SoapBuilder builder;
private SoapContext context;
SoapOperationImpl(SoapBuilder builder, QName bindingName, String operationName, String operationInputName,
String operationOutputName, String soapAction) {
this.builder = builder;
this.bindingName = bindingName;
this.operationName = operationName;
this.operationInputName = operationInputName;
this.operationOutputName = operationOutputName;
this.soapAction = soapAction;
this.context = builder.getContext();
}
public QName getBindingName() {
return bindingName;
}
public String getOperationName() {
return operationName;
}
public String getOperationInputName() {
return operationInputName;
}
public String getOperationOutputName() {
return operationOutputName;
}
public String getSoapAction() {
return soapAction;
}
@Override
public boolean isRpc() {
return builder.isRpc();
}
@Override
public boolean isInputSoapEncoded() {
return builder.isInputSoapEncoded(this);
}
@Override
public boolean isOutputSoapEncoded() {
return builder.isOutputSoapEncoded(this);
}
static SoapOperationBuilder create(SoapBuilder builder, Binding binding, BindingOperation operation) {
String soapAction = SoapUtils.getSOAPActionUri(operation);
return create(builder, binding, operation, soapAction);
}
static SoapOperationBuilder create(SoapBuilder builder, Binding binding, BindingOperation operation, String soapAction) {
String bindingInputName = operation.getBindingInput() != null ? operation.getBindingInput().getName() : null;
String bindingOutputName = operation.getBindingOutput() != null ? operation.getBindingOutput().getName() : null;
return new SoapOperationImpl(builder, binding.getQName(), operation.getName(), bindingInputName, bindingOutputName,
SoapUtils.normalizeSoapAction(soapAction));
}
public String toString() {
return String.format("bindingName=[%s] operationName=[%s] operationInputName=[%s] operationOutputName=[%s] soapAction=[%s]",
bindingName.toString(), operationName, operationInputName, operationOutputName, soapAction);
}
@Override
public void setContext(SoapContext context) {
this.context = context;
}
@Override
public SoapContext getContext() {
return builder.getContext();
}
@Override
public String buildInputMessage() {
return builder.buildInputMessage(this, context);
}
@Override
public String buildInputMessage(SoapContext context) {
return builder.buildInputMessage(this, context);
}
@Override
public String buildOutputMessage() {
return builder.buildOutputMessage(this, context);
}
@Override
public String buildOutputMessage(SoapContext context) {
return builder.buildOutputMessage(this, context);
}
@Override
public String buildFault(String code, String message) {
return builder.buildFault(code, message, context);
}
@Override
public String buildFault(String code, String message, SoapContext context) {
return builder.buildFault(code, message, context);
}
@Override
public String buildEmptyFault() {
return builder.buildEmptyFault(context);
}
@Override
public String buildEmptyFault(SoapContext context) {
return builder.buildEmptyFault(context);
}
@Override
public String buildEmptyMessage() {
return builder.buildEmptyMessage(context);
}
@Override
public String buildEmptyMessage(SoapContext context) {
return builder.buildEmptyMessage(context);
}
@Override
public void validateInputMessage(String message) {
builder.validateInputMessage(this, message);
}
@Override
public void validateInputMessage(String message, boolean strict) {
builder.validateInputMessage(this, message, strict);
}
@Override
public void validateOutputMessage(String message) {
builder.validateOutputMessage(this, message);
}
@Override
public void validateOutputMessage(String message, boolean strict) {
builder.validateOutputMessage(this, message, strict);
}
}
================================================
FILE: soap-builder/src/main/java/org/reficio/ws/builder/core/SoapUtils.java
================================================
/**
* Copyright (c) 2012-2013 Reficio (TM) - Reestablish your software!. All Rights Reserved.
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.reficio.ws.builder.core;
import org.reficio.ws.builder.SoapBuilder;
import org.reficio.ws.builder.SoapOperationBuilder;
import javax.wsdl.Binding;
import javax.wsdl.BindingOperation;
import javax.wsdl.extensions.ExtensibilityElement;
import javax.wsdl.extensions.soap.SOAPOperation;
import javax.wsdl.extensions.soap12.SOAP12Operation;
import java.util.List;
/**
* @author Tom Bujok
* @since 1.0.0
*/
public class SoapUtils {
// removes "" from soap action
public static String normalizeSoapAction(String soapAction) {
String normalizedSoapAction = "";
if (soapAction != null && soapAction.length() > 0) {
normalizedSoapAction = soapAction;
if (soapAction.charAt(0) == '"' && soapAction.charAt(soapAction.length() - 1) == '"') {
normalizedSoapAction = soapAction.substring(1, soapAction.length() - 1).trim();
}
}
return normalizedSoapAction;
}
public static String getSOAPActionUri(BindingOperation operation) {
List extensions = operation.getExtensibilityElements();
if (extensions != null) {
for (int i = 0; i < extensions.size(); i++) {
ExtensibilityElement extElement = (ExtensibilityElement) extensions.get(i);
if (extElement instanceof SOAPOperation) {
SOAPOperation soapOp = (SOAPOperation) extElement;
return soapOp.getSoapActionURI();
} else if (extElement instanceof SOAP12Operation) {
SOAP12Operation soapOp = (SOAP12Operation) extElement;
return soapOp.getSoapActionURI();
}
}
}
return null;
}
public static SoapOperationBuilder createOperation(SoapBuilder builder, Binding binding, BindingOperation operation, String soapAction) {
return SoapOperationImpl.create(builder, binding, operation, soapAction);
}
}
================================================
FILE: soap-builder/src/main/java/org/reficio/ws/builder/core/Wsdl.java
================================================
/**
* Copyright (c) 2012-2013 Reficio (TM) - Reestablish your software!. All Rights Reserved.
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.reficio.ws.builder.core;
import com.google.common.base.Preconditions;
import org.apache.commons.lang3.StringUtils;
import org.reficio.ws.SoapBuilderException;
import org.reficio.ws.SoapContext;
import org.reficio.ws.builder.SoapBuilder;
import org.reficio.ws.builder.SoapBuilderFinder;
import org.reficio.ws.legacy.SoapLegacyFacade;
import javax.wsdl.Binding;
import javax.wsdl.WSDLException;
import javax.xml.namespace.QName;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
/**
* @author Tom Bujok
* @since 1.0.0
*/
public final class Wsdl {
private final URL wsdlUrl;
private final SoapLegacyFacade soapFacade;
private Wsdl(URL wsdlUrl) {
try {
this.wsdlUrl = wsdlUrl;
this.soapFacade = new SoapLegacyFacade(wsdlUrl);
} catch (WSDLException e) {
throw new SoapBuilderException(e);
}
}
public static Wsdl parse(URL wsdlUrl) {
Preconditions.checkNotNull(wsdlUrl, "URL of the WSDL cannot be null");
return new Wsdl(wsdlUrl);
}
public static Wsdl parse(String wsdlUrl) {
Preconditions.checkNotNull(wsdlUrl, "URL of the WSDL cannot be null");
try {
return new Wsdl(new URL(wsdlUrl));
} catch (MalformedURLException e) {
throw new SoapBuilderException(e);
}
}
public List getBindings() {
return soapFacade.getBindingNames();
}
public SoapBuilderFinder binding() {
return new SoapBuilderFinderImpl();
}
public URL saveWsdl(File rootWsdl) {
return soapFacade.saveWsdl(rootWsdl.getName(), rootWsdl.getParentFile());
}
public static URL saveWsdl(URL wsdlUrl, File rootWsdl) {
return SoapLegacyFacade.saveWsdl(wsdlUrl, rootWsdl.getName(), rootWsdl.getParentFile());
}
public void printBindings() {
System.out.println(wsdlUrl);
for (QName bindingName : soapFacade.getBindingNames()) {
System.out.println("\t" + bindingName.toString());
}
}
class SoapBuilderFinderImpl implements SoapBuilderFinder {
SoapBuilderFinderImpl() {
}
private String namespaceURI;
private String localPart;
private String prefix;
@Override
public SoapBuilderFinder name(String name) {
return name(QName.valueOf(name));
}
@Override
public SoapBuilderFinder name(QName name) {
this.namespaceURI = name.getNamespaceURI();
this.localPart = name.getLocalPart();
this.prefix = name.getPrefix();
return this;
}
@Override
public SoapBuilderFinder namespaceURI(String namespaceURI) {
this.namespaceURI = namespaceURI;
return this;
}
@Override
public SoapBuilderFinder localPart(String localPart) {
this.localPart = localPart;
return this;
}
@Override
public SoapBuilderFinder prefix(String prefix) {
this.prefix = prefix;
return this;
}
@Override
public SoapBuilder find() {
validate();
return getBuilder(getBindingName(), SoapContext.DEFAULT);
}
@Override
public SoapBuilder find(SoapContext context) {
validate();
return getBuilder(getBindingName(), context);
}
private QName getBindingName() {
List result = new ArrayList();
for (QName bindingName : soapFacade.getBindingNames()) {
if (bindingName.getLocalPart().equals(localPart)) {
if (namespaceURI != null) {
if (!bindingName.getNamespaceURI().equals(namespaceURI)) {
continue;
}
}
if (prefix != null) {
if (!bindingName.getPrefix().equals(prefix)) {
continue;
}
}
result.add(bindingName);
}
}
if (result.isEmpty()) {
throw new SoapBuilderException("Binding not found");
}
if (result.size() > 1) {
throw new SoapBuilderException("Found more than one binding " + result);
}
return result.iterator().next();
}
private void validate() {
if (StringUtils.isBlank(localPart)) {
throw new SoapBuilderException("Specify at least localPart of the binding's QName");
}
}
}
public SoapBuilder getBuilder(String bindingName) {
return getBuilder(bindingName, SoapContext.DEFAULT);
}
public SoapBuilder getBuilder(String bindingName, SoapContext context) {
Preconditions.checkNotNull(bindingName, "BindingName cannot be null");
return getBuilder(QName.valueOf(bindingName), context);
}
public SoapBuilder getBuilder(QName bindingName) {
return getBuilder(bindingName, SoapContext.DEFAULT);
}
public SoapBuilder getBuilder(QName bindingName, SoapContext context) {
Preconditions.checkNotNull(bindingName, "BindingName cannot be null");
Preconditions.checkNotNull(context, "SoapContext cannot be null");
Binding binding = soapFacade.getBindingByName(bindingName);
return new SoapBuilderImpl(soapFacade, binding, context);
}
}
================================================
FILE: soap-builder/src/main/resources/xsds/XMLSchema.xsd
================================================
]>
Part 1 version: Id: structures.xsd,v 1.2 2004/01/15 11:34:25 ht Exp
Part 2 version: Id: datatypes.xsd,v 1.3 2004/01/23 18:11:13 ht Exp
The schema corresponding to this document is normative,
with respect to the syntactic constraints it expresses in the
XML Schema language. The documentation (within <documentation> elements)
below, is not normative, but rather highlights important aspects of
the W3C Recommendation of which this is a part
The simpleType element and all of its members are defined
towards the end of this schema document
This type is extended by almost all schema types
to allow attributes from other namespaces to be
added to user schemas.
This type is extended by all types which allow annotation
other than <schema> itself
This group is for the
elements which occur freely at the top level of schemas.
All of their types are based on the "annotated" type by extension.
This group is for the
elements which can self-redefine (see <redefine> below).
A utility type, not for public use
A utility type, not for public use
A utility type, not for public use
#all or (possibly empty) subset of {extension, restriction}
A utility type, not for public use
A utility type, not for public use
#all or (possibly empty) subset of {extension, restriction, list, union}
for maxOccurs
for all particles
for element, group and attributeGroup,
which both define and reference
'complexType' uses this
This branch is short for
<complexContent>
<restriction base="xs:anyType">
...
</restriction>
</complexContent>
Will be restricted to required or forbidden
Not allowed if simpleContent child is chosen.
May be overriden by setting on complexContent child.This choice is added simply to
make this a valid restriction per the REC
Overrides any setting on complexType parent.This choice is added simply to
make this a valid restriction per the REC
No typeDefParticle group reference
A utility type, not for public use
#all or (possibly empty) subset of {substitution, extension,
restriction}
The element element can be used either
at the top level to define an element-type binding globally,
or within a content model to either reference a globally-defined
element or type or declare an element-type binding locally.
The ref form is not allowed at the top level.
group type for explicit groups, named top-level groups and
group references
group type for the three kinds of groupThis choice with min/max is here to
avoid a pblm with the Elt:All/Choice/Seq
Particle derivation constraintrestricted max/min
Only elements allowed inside
simple type for the value of the 'namespace' attr of
'any' and 'anyAttribute'
Value is
##any - - any non-conflicting WFXML/attribute at all
##other - - any non-conflicting WFXML/attribute from
namespace other than targetNS
##local - - any unqualified non-conflicting WFXML/attribute
one or - - any non-conflicting WFXML/attribute from
more URI the listed namespaces
references
(space separated)
##targetNamespace or ##local may appear in the above list, to
refer to the targetNamespace of the enclosing
schema or an absent targetNamespace respectively
A utility type, not for public useA subset of XPath expressions for use
in selectorsA utility type, not for public
useThe following pattern is intended to allow XPath
expressions per the following EBNF:
Selector ::= Path ( '|' Path )*
Path ::= ('.//')? Step ( '/' Step )*
Step ::= '.' | NameTest
NameTest ::= QName | '*' | NCName ':' '*'
child:: is also allowed
A subset of XPath expressions for use
in fieldsA utility type, not for public
useThe following pattern is intended to allow XPath
expressions per the same EBNF as for selector,
with the following change:
Path ::= ('.//')? ( Step '/' )* ( Step | '@' NameTest )
The three kinds of identity constraints, all with
type of or derived from 'keybase'.
A utility type, not for public use
A public identifier, per ISO 8879
notations for use within XML Schema schemas
Not the real urType, but as close an approximation as we can
get in the XML representation
First the built-in primitive datatypes. These definitions are for
information only, the real built-in definitions are magic.
For each built-in datatype in this schema (both primitive and
derived) can be uniquely addressed via a URI constructed
as follows:
1) the base URI is the URI of the XML Schema namespace
2) the fragment identifier is the name of the datatype
For example, to address the int datatype, the URI is:
http://www.w3.org/2001/XMLSchema#int
Additionally, each facet definition element can be uniquely
addressed via a URI constructed as follows:
1) the base URI is the URI of the XML Schema namespace
2) the fragment identifier is the name of the facet
For example, to address the maxInclusive facet, the URI is:
http://www.w3.org/2001/XMLSchema#maxInclusive
Additionally, each facet usage in a built-in datatype definition
can be uniquely addressed via a URI constructed as follows:
1) the base URI is the URI of the XML Schema namespace
2) the fragment identifier is the name of the datatype, followed
by a period (".") followed by the name of the facet
For example, to address the usage of the maxInclusive facet in
the definition of int, the URI is:
http://www.w3.org/2001/XMLSchema#int.maxInclusive
NOTATION cannot be used directly in a schema; rather a type
must be derived from it by specifying at least one enumeration
facet whose value is the name of a NOTATION declared in the
schema.
Now the derived primitive types
pattern specifies the content of section 2.12 of XML 1.0e2
and RFC 3066 (Revised version of RFC 1766).
pattern matches production 7 from the XML spec
pattern matches production 5 from the XML spec
pattern matches production 4 from the Namespaces in XML spec
A utility type, not for public use
#all or (possibly empty) subset of {restriction, union, list}
A utility type, not for public use
Can be restricted to required or forbidden
Required at the top level
Forbidden when nested
We should use a substitution group for facets, but
that's ruled out because it would allow users to
add their own, which we're not ready for yet.
base attribute and simpleType child are mutually
exclusive, but one or other is required
itemType attribute and simpleType child are mutually
exclusive, but one or other is required
memberTypes attribute must be non-empty or there must be
at least one simpleType child
================================================
FILE: soap-builder/src/main/resources/xsds/soapEncoding.xsd
================================================
'root' can be used to distinguish serialization roots from other
elements that are present in a serialization but are not roots of
a serialized value graph
Attributes common to all elements that function as accessors or
represent independent (multi-ref) values. The href attribute is
intended to be used in a manner like CONREF. That is, the element
content should be empty iff the href attribute appears
'Array' is a complex type for accessors identified by position
================================================
FILE: soap-builder/src/main/resources/xsds/soapEncoding12.xsd
================================================
Attributes common to all elements that function as accessors or
represent independent (multi-ref) values. The ref attribute is
intended to be used in a manner like CONREF. That is, the element
content should be empty iff the ref attribute appears
A list type that allows * and non negative integers. Used as the
base type for arraySize below.
Pattern based restriction of the arraySizeBase list type. Used
as the type of the arraySize attribute. Restricts asterisk ( * )
to first list item only. Instances must contain at least an
asterisk ( * ) or a nonNegativeInteger. May contain other
nonNegativeIntegers as subsequent list items.
Valid instances include;
*
1
* 2
2 2
* 2 0
================================================
FILE: soap-builder/src/main/resources/xsds/soapEnvelope.xsd
================================================
Prose in the spec does not specify that attributes are allowed on the Body element
'encodingStyle' indicates any canonicalization conventions followed in the contents of the containing element. For example, the value 'http://schemas.xmlsoap.org/soap/encoding/' indicates the pattern described in SOAP specification
Fault reporting structure
================================================
FILE: soap-builder/src/main/resources/xsds/soapEnvelope12.xsd
================================================
Elements replacing the wildcard MUST be namespace qualified, but can be in the targetNamespace
Fault reporting structure
================================================
FILE: soap-builder/src/main/resources/xsds/swaref.xsd
================================================
================================================
FILE: soap-builder/src/main/resources/xsds/xmime200411.xsd
================================================
================================================
FILE: soap-builder/src/main/resources/xsds/xmime200505.xsd
================================================
================================================
FILE: soap-builder/src/main/resources/xsds/xml.xsd
================================================
See http://www.w3.org/XML/1998/namespace.html and
http://www.w3.org/TR/REC-xml for information about this namespace.
This schema document describes the XML namespace, in a form
suitable for import by other schema documents.
Note that local names in this namespace are intended to be defined
only by the World Wide Web Consortium or its subgroups. The
following names are currently defined in this namespace and should
not be used with conflicting semantics by any Working Group,
specification, or document instance:
base (as an attribute name): denotes an attribute whose value
provides a URI to be used as the base for interpreting any
relative URIs in the scope of the element on which it
appears; its value is inherited. This name is reserved
by virtue of its definition in the XML Base specification.
id (as an attribute name): denotes an attribute whose value
should be interpreted as if declared to be of type ID.
The xml:id specification is not yet a W3C Recommendation,
but this attribute is included here to facilitate experimentation
with the mechanisms it proposes. Note that it is _not_ included
in the specialAttrs attribute group.
lang (as an attribute name): denotes an attribute whose value
is a language code for the natural language of the content of
any element; its value is inherited. This name is reserved
by virtue of its definition in the XML specification.
space (as an attribute name): denotes an attribute whose
value is a keyword indicating what whitespace processing
discipline is intended for the content of the element; its
value is inherited. This name is reserved by virtue of its
definition in the XML specification.
Father (in any context at all): denotes Jon Bosak, the chair of
the original XML Working Group. This name is reserved by
the following decision of the W3C XML Plenary and
XML Coordination groups:
In appreciation for his vision, leadership and dedication
the W3C XML Plenary on this 10th day of February, 2000
reserves for Jon Bosak in perpetuity the XML name
xml:Father
This schema defines attributes and an attribute group
suitable for use by
schemas wishing to allow xml:base, xml:lang, xml:space or xml:id
attributes on elements they define.
To enable this, such a schema must import this schema
for the XML namespace, e.g. as follows:
<schema . . .>
. . .
<import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2001/xml.xsd"/>
Subsequently, qualified reference to any of the attributes
or the group defined below will have the desired effect, e.g.
<type . . .>
. . .
<attributeGroup ref="xml:specialAttrs"/>
will define a type which will schema-validate an instance
element with any of those attributesIn keeping with the XML Schema WG's standard versioning
policy, this schema document will persist at
http://www.w3.org/2005/08/xml.xsd.
At the date of issue it can also be found at
http://www.w3.org/2001/xml.xsd.
The schema document at that URI may however change in the future,
in order to remain compatible with the latest version of XML Schema
itself, or with the XML namespace itself. In other words, if the XML
Schema or XML namespaces change, the version of this document at
http://www.w3.org/2001/xml.xsd will change
accordingly; the version at
http://www.w3.org/2005/08/xml.xsd will not change.
Attempting to install the relevant ISO 2- and 3-letter
codes as the enumerated possible values is probably never
going to be a realistic possibility. See
RFC 3066 at http://www.ietf.org/rfc/rfc3066.txt and the IANA registry
at http://www.iana.org/assignments/lang-tag-apps.htm for
further information.
The union allows for the 'un-declaration' of xml:lang with
the empty string.See http://www.w3.org/TR/xmlbase/ for
information about this attribute.See http://www.w3.org/TR/xml-id/ for
information about this attribute.
================================================
FILE: soap-builder/src/main/resources/xsds/xop.xsd
================================================
================================================
FILE: soap-builder/src/test/java/org/reficio/ws/builder/DefinitionSaveTest.java
================================================
/**
* Copyright (c) 2012-2013 Reficio (TM) - Reestablish your software!. All Rights Reserved.
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.reficio.ws.builder;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.junit.Test;
import org.reficio.ws.builder.core.Wsdl;
import javax.wsdl.WSDLException;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
/**
* User: Tom Bujok (tom.bujok@gmail.com)
* Date: 23/05/12
* Time: 11:06 AM
*/
public class DefinitionSaveTest {
public static File getServiceFolder(int serviceId) {
URL definitionUrl = ServiceComplianceTest.getDefinitionUrl(serviceId);
File definitionFile = new File(definitionUrl.getFile());
File serviceFolder = new File(definitionUrl.getFile()).getParentFile();
if (serviceFolder.exists() == false) {
throw new RuntimeException("Cannot get service folder for service " + serviceId);
}
return serviceFolder;
}
public static File createTempFolder(String name) throws IOException {
File tempFolder = File.createTempFile(name, Long.toString(System.nanoTime()));
if (!tempFolder.delete()) {
throw new RuntimeException("cannot delete tmp file");
}
if (!tempFolder.mkdir()) {
throw new RuntimeException("cannot create tmp folder");
}
return tempFolder;
}
public static File getGeneratedFolder(int serviceId) throws WSDLException, IOException {
URL wsdlUrl = ServiceComplianceTest.getDefinitionUrl(serviceId);
File tempFolder = File.createTempFile("maven-temp", Long.toString(System.nanoTime()));
if (!tempFolder.delete()) {
throw new RuntimeException("cannot delete tmp file");
}
if (!tempFolder.mkdir()) {
throw new RuntimeException("cannot create tmp folder");
}
String fileName = FilenameUtils.getBaseName(wsdlUrl.toString());
File rootWsdl = new File(tempFolder, fileName);
Wsdl.saveWsdl(wsdlUrl, rootWsdl);
// builder.saveWsdl(fileName, tempFolder);
tempFolder.deleteOnExit();
return tempFolder;
}
public static List getFileNames(File folder) {
final boolean RECURSIVE = true;
String[] extensions = new String[]{"wsdl", "xsd"};
Collection files = FileUtils.listFiles(folder, extensions, RECURSIVE);
List fileNames = new ArrayList();
for (File file : files) {
fileNames.add(file.getName());
}
return fileNames;
}
public static File findFile(File folder, String name) {
final boolean RECURSIVE = true;
String[] extensions = new String[]{FilenameUtils.getExtension(name)};
Collection files = FileUtils.listFiles(folder, extensions, RECURSIVE);
if (files.isEmpty() == false) {
return files.iterator().next();
}
throw new RuntimeException("File not found " + name);
}
public static void testDefinitionSave(int serviceId) {
try {
File serviceFolder = getServiceFolder(serviceId);
File generatedFolder = getGeneratedFolder(serviceId);
List serviceFileNames = getFileNames(serviceFolder);
List generatedFileNames = getFileNames(generatedFolder);
Collections.sort(serviceFileNames);
Collections.sort(generatedFileNames);
assertEquals("serviceId " + serviceId, serviceFileNames.size(), generatedFileNames.size());
for (int i = 0; i < serviceFileNames.size(); i++) {
String srvFileName = serviceFileNames.get(i);
String genFileName = null;
for (int j = 0; j < generatedFileNames.size(); j++) {
String tmp = generatedFileNames.get(j);
if (tmp.endsWith(srvFileName) || tmp.equals(srvFileName)) {
genFileName = generatedFileNames.get(j);
break;
}
}
assertNotNull("serviceId " + serviceId + " " + srvFileName + " vs. " + genFileName, genFileName);
// TODO - XMLs are not identical due to different import/includes paths
// String srvContent = FileUtils.readFileToString(findFile(serviceFolder, srvFileName));
// String genContent = FileUtils.readFileToString(findFile(generatedFolder, genFileName));
// assertTrue("serviceId " + serviceId + " " + srvFileName + " vs. " + genFileName,
// XMLUnit.compareXML(srvContent, genContent).identical());
}
} catch (Exception e) {
throw new RuntimeException("serviceId " + serviceId, e);
}
}
@Test
public void testDefinitionSaveService() {
for (int serviceId = 1; serviceId <= 18; serviceId++) {
testDefinitionSave(serviceId);
}
}
}
================================================
FILE: soap-builder/src/test/java/org/reficio/ws/builder/MessageComplianceTest.java
================================================
/**
* Copyright (c) 2012-2013 Reficio (TM) - Reestablish your software!. All Rights Reserved.
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.reficio.ws.builder;
import org.apache.commons.io.FileUtils;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.reficio.ws.SoapContext;
import org.reficio.ws.common.ResourceUtils;
import org.reficio.ws.legacy.SoapLegacyFacade;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import static org.junit.Assert.assertEquals;
/**
* User: Tom Bujok (tom.bujok@gmail.com)
* Date: 17/10/11
* Time: Soap11:06 AM
*/
public class MessageComplianceTest {
private final static Logger log = Logger.getLogger(MessageComplianceTest.class);
public static String getContent(String folderPath, String fileName) {
URL fileUrl = ResourceUtils.getResourceWithAbsolutePackagePath(folderPath, fileName);
File file = null;
try {
file = new File(fileUrl.toURI());
} catch (URISyntaxException e) {
file = new File(fileUrl.getPath());
}
try {
return FileUtils.readFileToString(file).trim();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private static SoapContext context = SoapContext.builder()
.exampleContent(false)
.typeComments(false)
.alwaysBuildHeaders(false)
.valueComments(false)
.buildOptional(true)
.build();
@Test
public void testEmptyFaultSoap11() {
String emptyFaultSoap11 = SoapLegacyFacade.buildEmptyFault(SoapLegacyFacade.Soap.SOAP_1_1, context);
log.info("\n" + emptyFaultSoap11);
String expectedMsg = getContent("messages", "EmptyFault11.xml");
assertEquals(expectedMsg, emptyFaultSoap11);
}
@Test
public void testEmptyFaultSoap12() {
String emptyFaultSoap12 = SoapLegacyFacade.buildEmptyFault(SoapLegacyFacade.Soap.SOAP_1_2, context);
log.info("\n" + emptyFaultSoap12);
String expectedMsg = getContent("messages", "EmptyFault12.xml");
assertEquals(expectedMsg, emptyFaultSoap12);
}
@Test
public void testFaultSoap11() {
String faultSoap11 = SoapLegacyFacade.buildFault(SoapLegacyFacade.Soap.SOAP_1_1, "VersionMismatch", "Fault Message", context);
log.info("\n" + faultSoap11);
String expectedMsg = getContent("messages", "FaultVersionMismatch11.xml");
assertEquals(expectedMsg, faultSoap11);
}
@Test
public void testFaultSoap12() {
String faultSoap12 = SoapLegacyFacade.buildFault(SoapLegacyFacade.Soap.SOAP_1_2, "VersionMismatch", "Fault Message", context);
log.info("\n" + faultSoap12);
String expectedMsg = getContent("messages", "FaultVersionMismatch12.xml");
assertEquals(expectedMsg, faultSoap12);
}
@Test
public void testEmptyMessageSoap11() {
String emptyMessageSoap11 = SoapLegacyFacade.buildEmptyMessage(SoapLegacyFacade.Soap.SOAP_1_1, context);
log.info("\n" + emptyMessageSoap11);
String expectedMsg = getContent("messages", "EmptyMessage11.xml");
assertEquals(expectedMsg, emptyMessageSoap11);
}
@Test
public void testEmptyMessageSoap12() {
String emptyMessageSoap12 = SoapLegacyFacade.buildEmptyMessage(SoapLegacyFacade.Soap.SOAP_1_2, context);
log.info("\n" + emptyMessageSoap12);
String expectedMsg = getContent("messages", "EmptyMessage12.xml");
assertEquals(expectedMsg, emptyMessageSoap12);
}
}
================================================
FILE: soap-builder/src/test/java/org/reficio/ws/builder/ServiceComplianceTest.java
================================================
/**
* Copyright (c) 2012-2013 Reficio (TM) - Reestablish your software!. All Rights Reserved.
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.reficio.ws.builder;
import com.ibm.wsdl.xml.WSDLReaderImpl;
import org.apache.commons.io.FileUtils;
import org.apache.log4j.Logger;
import org.custommonkey.xmlunit.XMLUnit;
import org.junit.Test;
import org.reficio.ws.SoapContext;
import org.reficio.ws.builder.core.Wsdl;
import org.reficio.ws.common.ResourceUtils;
import org.reficio.ws.common.XmlUtils;
import javax.wsdl.Definition;
import javax.wsdl.WSDLException;
import javax.wsdl.xml.WSDLReader;
import javax.xml.namespace.QName;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import static junit.framework.Assert.assertTrue;
/**
* User: Tom Bujok (tom.bujok@gmail.com)
* Date: 12/10/11
* Time: 12:23 PM
*/
public class ServiceComplianceTest {
private final static Logger log = Logger.getLogger(ServiceComplianceTest.class);
enum MessageType {REQUEST, RESPONSE}
public static String getTestServiceFolderPath(int testServiceId) {
String testServiceIdString = (testServiceId < 10) ? "0" + testServiceId : "" + testServiceId;
return "/services/test" + testServiceIdString;
}
public static URL getDefinitionUrl(int testServiceId) {
URL wsdlUrl = ResourceUtils.getResourceWithAbsolutePackagePath(
getTestServiceFolderPath(testServiceId), "TestService.wsdl");
return wsdlUrl;
}
public static Definition getDefinition(URL wsdlUrl) throws WSDLException {
WSDLReader reader = new WSDLReaderImpl();
Definition definition = reader.readWSDL(wsdlUrl.getPath());
return definition;
}
public static String getExpectedMessage(int testServiceId, String bindingName, String operationName, MessageType msg) {
String serviceFolderPath = getTestServiceFolderPath(testServiceId);
String messageFolderPath = String.format("%s/operations/%s", serviceFolderPath, bindingName);
String fileName = operationName + "." + (MessageType.REQUEST.equals(msg) ? "request" : "response") + ".xml";
URL fileUrl = ResourceUtils.getResourceWithAbsolutePackagePath(messageFolderPath, fileName);
File file = null;
try {
file = new File(fileUrl.toURI());
} catch (URISyntaxException e) {
file = new File(fileUrl.getPath());
}
try {
return FileUtils.readFileToString(file);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static String getExpectedRequest(int testServiceId, String bindingName, String operationName) {
return getExpectedMessage(testServiceId, bindingName, operationName, MessageType.REQUEST);
}
public static String getExpectedResponse(int testServiceId, String bindingName, String operationName) {
return getExpectedMessage(testServiceId, bindingName, operationName, MessageType.RESPONSE);
}
@SuppressWarnings("unchecked")
private static void testService(int testServiceId) throws Exception {
URL wsdlUrl = getDefinitionUrl(testServiceId);
Wsdl parser = Wsdl.parse(wsdlUrl);
SoapContext context = SoapContext.builder()
.exampleContent(false)
.build();
for (QName bindingQName : parser.getBindings()) {
String bindingName = bindingQName.getLocalPart();
SoapBuilder builder = parser.binding().name(bindingQName).find();
for (SoapOperation operation : builder.getOperations()) {
String request = builder.buildInputMessage(operation);
String expectedRequest = getExpectedRequest(testServiceId, bindingName, operation.getOperationName());
log.info(String.format("Comparing binding=[%s] operation=[%s]", bindingName, operation.getOperationName()));
log.info("REQUEST:\n" + request);
log.info("EXPECTED_REQUEST:\n" + expectedRequest);
request = XmlUtils.normalizeAndRemoveValues(request);
expectedRequest = XmlUtils.normalizeAndRemoveValues(expectedRequest);
log.info("REQUEST_NO_VALUES:\n" + request);
log.info("EXPECTED_REQUEST_NO_VALUES:\n" + expectedRequest);
assertTrue(XMLUnit.compareXML(expectedRequest, request).identical());
String response = builder.buildOutputMessage(operation, context);
String expectedResponse = getExpectedResponse(testServiceId, bindingName, operation.getOperationName());
log.info("RESPONSE:\n" + response);
log.info("EXPECTED_RESPONSE:\n" + expectedResponse);
response = XmlUtils.normalizeAndRemoveValues(response);
expectedResponse = XmlUtils.normalizeAndRemoveValues(expectedResponse);
log.info("RESPONSE_NO_VALUES:\n" + response);
log.info("EXPECTED_RESPONSE_NO_VALUES:\n" + expectedResponse);
assertTrue(XMLUnit.compareXML(expectedResponse, response).identical());
}
}
}
@Test
public void testService01() throws Exception {
testService(1);
}
@Test
public void testService02() throws Exception {
testService(2);
}
@Test
public void testService03() throws Exception {
testService(3);
}
@Test
public void testService04() throws Exception {
testService(4);
}
@Test
public void testService05() throws Exception {
testService(5);
}
@Test
public void testService06() throws Exception {
testService(6);
}
@Test
public void testService07() throws Exception {
testService(7);
}
@Test
public void testService08() throws Exception {
testService(8);
}
@Test
public void testService09() throws Exception {
testService(9);
}
@Test
public void testService10() throws Exception {
testService(10);
}
@Test
public void testService11() throws Exception {
testService(11);
}
@Test
public void testService12() throws Exception {
testService(12);
}
@Test
public void testService13() throws Exception {
testService(13);
}
@Test
public void testService14() throws Exception {
testService(14);
}
@Test
public void testService15() throws Exception {
testService(15);
}
@Test
public void testService16() throws Exception {
testService(16);
}
@Test
public void testService17() throws Exception {
testService(17);
}
@Test
public void testService18() throws Exception {
testService(18);
}
}
================================================
FILE: soap-builder/src/test/java/org/reficio/ws/builder/SoapBuilderImplTest.java
================================================
/**
* Copyright (c) 2012-2013 Reficio (TM) - Reestablish your software!. All Rights Reserved.
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.reficio.ws.builder;
import org.junit.Test;
import org.reficio.ws.builder.core.Wsdl;
import org.reficio.ws.common.ResourceUtils;
import javax.wsdl.WSDLException;
import java.net.URL;
import static junit.framework.Assert.assertNotNull;
public class SoapBuilderImplTest {
@Test
public void testLoadSnowboard_Bug_851() throws WSDLException {
URL wsdlUrl = ResourceUtils.getResourceWithAbsolutePackagePath("builder", "snowboard.wsdl");
SoapBuilder builder = Wsdl.parse(wsdlUrl).binding().name("{http://namespaces.snowboard-info.com}EndorsementSearchSoapBinding").find();
for (SoapOperation op : builder.getOperations()) {
assertNotNull(op);
}
}
}
================================================
FILE: soap-builder/src/test/java/org/reficio/ws/builder/SoapOperationFinderImplTest.java
================================================
/**
* Copyright (c) 2012-2013 Reficio (TM) - Reestablish your software!. All Rights Reserved.
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.reficio.ws.builder;
import org.junit.Test;
import org.reficio.ws.SoapBuilderException;
import org.reficio.ws.builder.core.Wsdl;
import org.reficio.ws.common.ResourceUtils;
import java.net.URL;
import static org.junit.Assert.assertNotNull;
public class SoapOperationFinderImplTest {
public SoapOperationFinder operation() {
URL wsdlUrl = ResourceUtils.getResourceWithAbsolutePackagePath("wsdl", "TestService.wsdl");
Wsdl parser = Wsdl.parse(wsdlUrl);
String binding = "{http://schemas.eviware.com/TestService/v1/}TestServiceSoap";
return parser.binding().name(binding).find().operation();
}
@Test(expected = IllegalArgumentException.class)
public void testFinderNoArguments() {
operation().find();
}
@Test(expected = NullPointerException.class)
public void testFinderWrongArgument() {
operation().name(null).find();
}
@Test(expected = SoapBuilderException.class)
public void testFinderNoOperation() {
operation().name("asd").find();
}
@Test
public void testFindOk() {
assertNotNull(operation().name("GetDefaultPageData").find());
}
@Test(expected = SoapBuilderException.class)
public void testFindNameOkWrongAction() {
operation().name("GetDefaultPageData").soapAction("asdasdasd").find();
}
}
================================================
FILE: soap-builder/src/test/java/org/reficio/ws/builder/WsdlTest.java
================================================
/**
* Copyright (c) 2012-2013 Reficio (TM) - Reestablish your software!. All Rights Reserved.
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.reficio.ws.builder;
import org.junit.Test;
import org.reficio.ws.SoapBuilderException;
import org.reficio.ws.SoapContext;
import org.reficio.ws.builder.core.Wsdl;
import org.reficio.ws.common.ResourceUtils;
import javax.xml.namespace.QName;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import static junit.framework.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
public class WsdlTest {
@Test(expected = NullPointerException.class)
public void testParseNullUrl() {
Wsdl.parse((String) null);
}
@Test(expected = SoapBuilderException.class)
public void testParseWrongUrl() throws MalformedURLException {
URL wsdlUrl = new URL("http://asd.com/asd.wsdl");
Wsdl parser = Wsdl.parse(wsdlUrl);
assertNotNull(parser);
}
@Test
public void testParseTestWsdl() {
URL wsdlUrl = ResourceUtils.getResourceWithAbsolutePackagePath("wsdl", "TestService.wsdl");
Wsdl parser = Wsdl.parse(wsdlUrl);
assertNotNull(parser);
List bindings = parser.getBindings();
String expectedBindingString = "{http://schemas.eviware.com/TestService/v1/}TestServiceSoap";
QName expectedBinding = QName.valueOf(expectedBindingString);
assertEquals(1, bindings.size());
assertEquals(expectedBinding, bindings.iterator().next());
assertNotNull(parser.binding().name(expectedBindingString).find());
assertNotNull(parser.binding().name(expectedBinding).find());
}
@Test(expected = NullPointerException.class)
public void testParseTestWsdlNullContext() {
URL wsdlUrl = ResourceUtils.getResourceWithAbsolutePackagePath("wsdl", "TestService.wsdl");
Wsdl parser = Wsdl.parse(wsdlUrl);
String expectedBindingString = "{http://schemas.eviware.com/TestService/v1/}TestServiceSoap";
parser.binding().name(expectedBindingString).find(null);
}
@Test
public void testParseTestWsdlProperContext() {
URL wsdlUrl = ResourceUtils.getResourceWithAbsolutePackagePath("wsdl", "TestService.wsdl");
Wsdl parser = Wsdl.parse(wsdlUrl);
String expectedBindingString = "{http://schemas.eviware.com/TestService/v1/}TestServiceSoap";
SoapContext context = SoapContext.builder().typeComments(true).build();
SoapBuilder builder = parser.binding().name(expectedBindingString).find(context);
assertEquals(context, builder.getContext());
}
}
================================================
FILE: soap-builder/src/test/resources/builder/snowboard.wsdl
================================================
snowboarding-info.com Endorsement Service
================================================
FILE: soap-builder/src/test/resources/log4j.xml
================================================
================================================
FILE: soap-builder/src/test/resources/messages/EmptyFault11.xml
================================================
???
================================================
FILE: soap-builder/src/test/resources/messages/EmptyFault12.xml
================================================
?????
================================================
FILE: soap-builder/src/test/resources/messages/EmptyMessage11.xml
================================================
================================================
FILE: soap-builder/src/test/resources/messages/EmptyMessage12.xml
================================================
================================================
FILE: soap-builder/src/test/resources/messages/FaultVersionMismatch11.xml
================================================
VersionMismatchFault Message
================================================
FILE: soap-builder/src/test/resources/messages/FaultVersionMismatch12.xml
================================================
VersionMismatchFault Message
================================================
FILE: soap-builder/src/test/resources/services/test01/TestService.wsdl
================================================
Read page data from TestRead page children from TestFind pages that has special propertiesSave page data to TestReturns true for signed and authenticated messages and false for unsigned messagesDelete a page versionDelete a pageDelete page childrenMove a pageCopy a page
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/Copy.request.xml
================================================
??????????
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/Copy.response.xml
================================================
??????
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/Delete.request.xml
================================================
???????
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/Delete.response.xml
================================================
??
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/DeleteChildren.request.xml
================================================
???????
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/DeleteChildren.response.xml
================================================
??
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/DeleteVersion.request.xml
================================================
??????
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/DeleteVersion.response.xml
================================================
??
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/FindPagesWithCriteria.request.xml
================================================
?????????????
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/FindPagesWithCriteria.response.xml
================================================
???????????????????????
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/GetChildren.request.xml
================================================
??????
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/GetChildren.response.xml
================================================
???????????????????????
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/GetDefaultPageData.request.xml
================================================
???????
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/GetDefaultPageData.response.xml
================================================
???????????????????????
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/GetPage.request.xml
================================================
??????
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/GetPage.response.xml
================================================
???????????????????????
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/Move.request.xml
================================================
??????????
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/Move.response.xml
================================================
??
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/Ping.request.xml
================================================
??
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/Ping.response.xml
================================================
???
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/Save.request.xml
================================================
????????????????????????
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/TestServiceSoap/Save.response.xml
================================================
??????
================================================
FILE: soap-builder/src/test/resources/services/test01/operations/soap-version.txt
================================================
SOAP 1.1
================================================
FILE: soap-builder/src/test/resources/services/test01/readme.txt
================================================
This setup only uses relative includes
================================================
FILE: soap-builder/src/test/resources/services/test01/testservice1.xsd
================================================
================================================
FILE: soap-builder/src/test/resources/services/test01/testservice2.xsd
================================================