I have an object and iam serilaizing the object using xml seriliazer.
after serilaizing my data looks like this
<?xml version="1.0" encoding="utf-8"?>
<doPaymentRequest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Credentials>
<accountId>101</accountId>
<userName>santosh#gmail.com</userName>
<password>1234</password>
</Credentials>
<custFirstName>santosh</custFirstName>
<custLastName>reddy</custLastName>
<ssn>1234</ssn>
<phoneNbr>1234567890</phoneNbr>
<PaymentRequest>
<ncpTranCode>10104587</ncpTranCode>
<tranType>PAY</tranType>
<Payment>
<tranAmount>100</tranAmount>
<paymentDateDate>2013-04-30</paymentDateDate>
<tenderType>C</tenderType>
</Payment>
</PaymentRequest>
<csoId>203</csoId>
<csoStCode>8974</csoStCode>
</doPaymentRequest>
But my xml should look like this way
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://xxxxxxxxxxxx" xmlns:com="http://xxxxxxxxxxxxxxxxxx">
<soapenv:Header/>
<soapenv:Body>
<req:doPaymentRequest>
<req:credentials>
<com:accountId>*********</com:accountId>
<com:userName>*********</com:userName>
<com:password>*********</com:password>
</req:credentials>
<req:custFirstName>Test</req:custFirstName>
<!-- Optional: -->
<req:custMiddleName>Test</req:custMiddleName>
<req:custLastName>Test</req:custLastName>
<req:ssn>7895</req:ssn>
<!-- Optional: -->
<req:phoneNbr>1234567890</req:phoneNbr>
<req:paymentRequest>
<req:ncpTranCode>10104587</req:ncpTranCode>
<req:tranType>PAY</req:tranType>
<req:payment>
<req:tranAmount>100</req:tranAmount>
<req:paymentDateDate>2013-04-30</req:paymentDateDate>
<req:tenderType>C</req:tenderType>
</req:payment>
</req:paymentRequest>
<req:csoId>203</req:csoId>
<req:csoStCode>8974</req:csoStCode>
</req:doPaymentRequest>
</soapenv:Body>
</soapenv:Envelope>
How to add prefixes like req,com.
I am using XmlSerializer to convert my object to xml.
xmlSerializer.Serialize(stWriter, myobject);
is there any SOAP serialize like thing
............Edited.............
I used SoapFormatter and serialized the object and converting it to string using
Encoding.ASCII.GetString(memStream.GetBuffer())
then my string looks weird like following.
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<i2:doPaymentRequest id="ref-1" xmlns:i2="http://schemas.xmlsoap.org/soap/envelope/">
<_x003C_Credentials_x003E_k__BackingField href="#ref-4"/>
<_x003C_custFirstName_x003E_k__BackingField id="ref- 5">santosh</_x003C_custFirstName_x003E_k__BackingField>
<_x003C_custMiddleName_x003E_k__BackingField xsi:null="1"/>
<_x003C_custLastName_x003E_k__BackingField id="ref- 6">reddy</_x003C_custLastName_x003E_k__BackingField>
<_x003C_ssn_x003E_k__BackingField id="ref-7">1234</_x003C_ssn_x003E_k__BackingField>
<_x003C_phoneNbr_x003E_k__BackingField id="ref- 8">1234567890</_x003C_phoneNbr_x003E_k__BackingField>
<_x003C_PaymentRequest_x003E_k__BackingField href="#ref-9"/>
<_x003C_csoId_x003E_k__BackingField id="ref- 10">203</_x003C_csoId_x003E_k__BackingField>
<_x003C_csoStCode_x003E_k__BackingField id="ref- 11">8974</_x003C_csoStCode_x003E_k__BackingField>
</i2:doPaymentRequest>
<a1:credentials id="ref-4" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/MemoService/MemoService%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull">
<_x003C_accountId_x003E_k__BackingField id="ref- 12">101</_x003C_accountId_x003E_k__BackingField>
<_x003C_userName_x003E_k__BackingField id="ref-13">santosh#gmail.com</_x003C_userName_x003E_k__BackingField>
<_x003C_password_x003E_k__BackingField id="ref-14">1234</_x003C_password_x003E_k__BackingField>
</a1:credentials>
<a1:paymentRequest id="ref-9" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/MemoService/MemoService%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull">
<_x003C_ncpTranCode_x003E_k__BackingField id="ref- 15">10104587</_x003C_ncpTranCode_x003E_k__BackingField>
<_x003C_tranType_x003E_k__BackingField id="ref- 16">PAY</_x003C_tranType_x003E_k__BackingField>
<_x003C_Payment_x003E_k__BackingField href="#ref-17"/>
</a1:paymentRequest>
<a1:payment id="ref-17" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/MemoService/MemoService%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull">
<_x003C_tranAmount_x003E_k__BackingField id="ref- 18 ">100</_x003C_tranAmount_x003E_k__BackingField>
<_x003C_paymentDateDate_x003E_k__BackingField id="ref-19">2013-04-
30</_x003C_paymentDateDate_x003E_k__BackingField>
<_x003C_tenderType_x003E_k__BackingField id="ref-
20">C</_x003C_tenderType_x003E_k__BackingField>
</a1:payment>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Am i missing anything here...
[Serializable]
public class MyData
{
public int MyNumber { get; set; }
public string Name { get; set; }
}
class Program
{
static void Main(string[] args)
{
using (MemoryStream stream = new MemoryStream())
{
MyData data = new MyData() { MyNumber = 11, Name = "StackOverflow" };
XmlSerializer serializerXML = new XmlSerializer(data.GetType());
serializerXML.Serialize(stream, data);
stream.Seek(0, SeekOrigin.Begin);
data = (MyData)serializerXML.Deserialize(stream);
// We're cheating here, because I assume the SOAP data
// will be larger than the previous stream.
stream.Seek(0, SeekOrigin.Begin);
SoapFormatter serializerSoap = new SoapFormatter();
serializerSoap.Serialize(stream, data);
stream.Seek(0, SeekOrigin.Begin);
data = (MyData)serializerSoap.Deserialize(stream);
}
}
}
Copied from https://stackoverflow.com/a/3256887/87956
Related
An external system is sending my service a SOAP message and I have a listener in place
#Endpoint
public class NotificationListener {
private static final String NAMESPACE_URI = "http://test.com/test";
#PayloadRoot(namespace = NAMESPACE_URI, localPart = "Notification")
#ResponsePayload
public void getSOAPMessage(#RequestPayload HistoryMessage request) {
// calls to methods in other classes which handle the business logic
}
The request body contains the following headers:
<soap:Header>
<wsa:To soap:mustUnderstand="1"
xmlns:wsa="http://www.w3.org/2005/08/addressing">{destination endpoint}
</wsa:To>
<wsa:From
xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsa:Address>http://www.w3.org/2005/08/addressing/anonymous</wsa:Address>
</wsa:From>
<wsa:ReplyTo
xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsa:Address>http://www.w3.org/2005/08/addressing/anonymous</wsa:Address>
</wsa:ReplyTo>
<wsa:FaultTo
xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsa:Address>http://www.w3.org/2005/08/addressing/anonymous</wsa:Address>
</wsa:FaultTo>
<wsa:Action soap:mustUnderstand="1"
xmlns:wsa="http://www.w3.org/2005/08/addressing">
</wsa:Action>
<wsa:MessageID
xmlns:wsa="http://www.w3.org/2005/08/addressing">urn:uuid:fa163e6e-ef55-1eec-b9ac-5e80af1d126a
</wsa:MessageID>
I get the following error on calling my endpoint:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:MustUnderstand</faultcode>
<faultstring xml:lang="en">One or more mandatory SOAP header blocks not understood</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
I understand that the mustUnderstand attribute in the header is set to 1 which means true and that header must be handled. But how do I handle it?
I'm using Spring WS to build the listener service.
TIA:)
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<m:GetPriceRespon`enter code here`se xmlns:m="https://www.w3schools.com/prices">
<m:Price>1.90</m:Price>
</m:GetPriceResponse>
</soap:Body>
</soap:Envelope>
I want to read "Price" from above XML , how to read this price using cypress and store it to a variable ? could any one help me with the sample cypress code ?
You can use a DOMParser to make a queryable document,
it('parses XML price', () => {
const xmlStr = `<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<m:GetPriceResponse xmlns:m="https://www.w3schools.com/prices">
<m:Price>1.90</m:Price>
</m:GetPriceResponse>
</soap:Body>
</soap:Envelope>`
const parser = new DOMParser();
const doc = parser.parseFromString(xmlStr, "application/xml");
const price = +doc.querySelector("Price").textContent // numeric value of text content
cy.wrap(price)
.as('price') // save for later
.should('eq', 1.90) // verify the value
});
You can do something like this:
const xml = `<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<m:GetPriceResponse xmlns:m="https://www.w3schools.com/prices">
<m:Price>1.90</m:Price>
</m:GetPriceResponse>
</soap:Body>
</soap:Envelope>`
cy.wrap(Cypress.$(xml))
.then((xml) => xml.filter('soap:Body').find('m:Price').text())
.as('price')
cy.get('#price').then((price) => {
//Access price here
})
Working with an old wsdl file generated with AXIS to make it work with spring ws. After doing some tweaks and all, i could generate the java sources with the old wsdl.
Now i am trying to make a request from soap UI , But request values are shown as null in endpoint method. Request is coming in backend properly but not values.
WSDL file
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:onl="http://online.mysite.com">
<soapenv:Header/>
<soapenv:Body>
<onl:getSummary soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<in0 xsi:type="onl:SummaryObject">
<docid xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">doc123</docid>
<amount xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">?</amount>
<duenew xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">?</duenew>
<reference xsi:type="xsd:long">?</reference>
<sortBy xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">?</sortBy>
<startDate xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">?</startDate>
</in0>
</onl:getSummary>
</soapenv:Body>
</soapenv:Envelope>
Soap Request:
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:onl="http://online.mysite.com">
<soapenv:Header/>
<soapenv:Body>
<onl:getSummary soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<in0 xsi:type="onl:SummaryObject">
<docid xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">doc123</docid>
<amount xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">?</amount>
<duenew xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">?</duenew>
<reference xsi:type="xsd:long">121212121</reference>
<sortBy xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">?</sortBy>
<startDate xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">?</startDate>
<visibility xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">?</visibility>
</in0>
</onl:getSummary>
</soapenv:Body>
</soapenv:Envelope>
Endpoint Method:
#PayloadRoot(namespace = NAMESPACE_URI, localPart ="getSummary")
#ResponsePayload
public JAXBElement<EObjects> getSummary(#RequestPayload SummaryObject summaryObject) {
System.out.println("Am done with this"+summaryObject.getDocId());
ObjectFactory factory = new ObjectFactory();
EObjects objects = factory.createEObjects();
QName qname = new QName("http://online.mysite.com", "eobjects");
return new JAXBElement(qname, EObjects.class, objects);
}
WSDL generated in axis 1 is no longer been supported by spring ws or CXF. So that generated java classes from WSDL wont have required information that is needed for unmarshelling of request by JAXB in spring. Thus request object will come as null.
I have done a work around which has 2 things to do
Add xml root element annotation on top of the request object class generated from WSDL.
#XmlRootElement(name="getSomething",namespace =
"http://yoursite.com")
unmarshell the request object manually as shown below:
code
SoapMessage message = (SoapMessage) messageContext.getRequest();
ByteArrayOutputStream out = new ByteArrayOutputStream();
message.writeTo(out);
String strMsg = new String(out.toByteArray()); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Document d = db.parse(new InputSource(new StringReader(strMsg)));
Node getrequestObject = d.getElementsByTagName("yourtag").item(0);
JAXBContext jc = JAXBContext.newInstance(MyRequestObject.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
JAXBElement<SummaryObject> je = unmarshaller.unmarshal(new
DOMSource(getrequestObject), MyRequestObject.class);
I need to create a Soap request from a request object in Java. What is needed is below :
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<tem:tag1>
<tem:tag2>
<MyDataSet>
<!-- more elements within-->
</MyDataSet>
<tem:tag1>
<tem:tag2>
</SOAP-ENV:Body>
<atom/>
</SOAP-ENV:Envelope>
However, what I am getting is this :
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<MyDataSet>
<!-- more elements within-->
</MyDataSet>
</SOAP-ENV:Body>
<atom/>
</SOAP-ENV:Envelope>
Can someone please tell me how do I add <tem:tag1> and <tem:tag2> in the soap request ? This is the code that I have written so far:
public static void main(String[] args) throws Exception
{
MyRequest request = new MyRequest();
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Marshaller marshaller = JAXBContext.newInstance(MyRequest.class).createMarshaller();
marshaller.marshal(request, document);
SOAPMessage soapMessage = MessageFactory.newInstance().createMessage();
soapMessage.getSOAPPart().getEnvelope().addNamespaceDeclaration("tem", "http://tempuri.org/");
soapMessage.getSOAPBody().addDocument(document);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
soapMessage.writeTo(outputStream);
String output = new String(outputStream.toByteArray());
System.out.println(output);
}
Assuming that the web service has published WSDL, I suggest that instead of rolling your own client code, you generate it using wsimport, a utility that is included in the Java JDK. One article on how to use it can be found here.
I'm trying to create a transparent proxy with Switchyard.
The idea is having a "promoted" service exposed by Switchyard. Calls to this webservice will be redirected with Camel to a service reference. Service reference (proxified service) and promoted service have the same WSDL.
The problem is that the SOAP calls that the user does contains a custom token in the SOAP Envelope Header that it is NOT propagated. How can I solve that?
SOAP Call Example (User->Propagated Service):
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.test/">
<soapenv:Header>
<token>foo</token>
</soapenv:Header>
<soapenv:Body>
<ser:readSomethings>
<something>
</something>
</ser:readSomethings>
</soapenv:Body>
</soapenv:Envelope>
SOAP Call that Switchyard does to the "proxified" service (It doesn't contain the token!!):
<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<ser:readSomethings xmlns:ser=\"http://service.test/\">
<something></something>
</ser:readSomethings>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
switchyard.xml:
<?xml version="1.0" encoding="ASCII"?>
<switchyard xmlns="urn:switchyard-config:switchyard:1.0" xmlns:bean="urn:switchyard-component-bean:config:1.0" xmlns:camel="urn:switchyard-component-camel:config:1.0" xmlns:sca="http://docs.oasis-open.org/ns/opencsa/sca/200912" xmlns:soap="urn:switchyard-component-soap:config:1.0" name="SomethingService" targetNamespace="urn:my.company.something:SomethingService:1.0">
<sca:composite name="SomethingService" targetNamespace="urn:my.company.something:SomethingService:1.0">
<sca:service name="PromotedProxyService" promote="ProxyService/ProxyService">
<soap:binding.soap>
<soap:contextMapper includes=".*"/>
<soap:wsdl>META-INF/SomethingWS.wsdl</soap:wsdl>
<soap:socketAddr>:${jettyPort}</soap:socketAddr>
<soap:contextPath>SomethingService</soap:contextPath>
</soap:binding.soap>
</sca:service>
<sca:reference name="ProxifiedService" multiplicity="0..1" promote="ProxyService/ProxifiedService">
<soap:binding.soap>
<soap:contextMapper includes=".*"/>
<soap:wsdl>META-INF/SomethingWS.wsdl</soap:wsdl>
<soap:endpointAddress>http://IP:8080/ws_admin/SomethingWS</soap:endpointAddress>
</soap:binding.soap>
</sca:reference>
<sca:component name="ProxyService">
<camel:implementation.camel>
<camel:java class="my.company.something.RouterCamel"/>
</camel:implementation.camel>
<sca:service name="ProxyService">
<sca:interface.wsdl interface="META-INF/SomethingWS.wsdl#wsdl.porttype(SomethingWS)"/>
</sca:service>
<sca:reference name="ProxifiedService">
<sca:interface.wsdl interface="META-INF/SomethingWS.wsdl#wsdl.porttype(SomethingWS)"/>
</sca:reference>
</sca:component>
</sca:composite>
<domain>
<properties>
<property name="org.switchyard.handlers.messageTrace.enabled" value="true"/>
</properties>
</domain>
</switchyard>
RouterCamel.java
public class RouterCamel extends org.apache.camel.builder.RouteBuilder{
public void configure() {
org.apache.camel.Processor myProc = new org.apache.camel.Processor(){
public void process(org.apache.camel.Exchange exchange) throws Exception {
System.out.println("------------------------------ ENTRO\n\n\n\n");
String body = exchange.getIn().getBody(String.class);
// change the message to say Hello
System.out.println("\n\n\n\n------------------------------ BODY: " + body);
exchange.getOut().setBody(body);
// copy headers from IN to OUT to propagate them
System.out.println("Header in values:");
for(Entry<String, Object> header: exchange.getIn().getHeaders().entrySet()){
System.out.println("Header: " + header.getKey() + " Value: " + header.getValue());
}
exchange.getOut().setHeaders(exchange.getIn().getHeaders());
System.out.println("Header out values:");
for(Entry<String, Object> header: exchange.getOut().getHeaders().entrySet()){
System.out.println("Header: " + header.getKey() + " Value: " + header.getValue());
}
}
};
// Define routing rules here:
from("switchyard://ProxyService").process(myProc).to("switchyard://ProxifiedService");
}
}
The header was not propagated because it didn't have a namespace.
I found the answer here: https://developer.jboss.org/thread/243364
<sca:reference name="ProxyReference" multiplicity="0..1" promote="Proxy/ProxyService">
<sca:interface.wsdl interface="META-INF/wsdl/RegisterService.wsdl#wsdl.porttypePortType)"/>
<soap:binding.soap name="soap">
<soap:contextMapper class="WSHeaderContextMapper"/>
<soap:wsdl>META-INF/wsdl/RegisterService.wsdl</soap:wsdl>
<soap:endpointAddress>${service.address}</soap:endpointAddress>
<soap:timeout>12000</soap:timeout>
</soap:binding.soap>
</sca:reference>
import org.apache.wss4j.dom.WSConstants;
import org.apache.wss4j.dom.message.WSSecUsernameToken;
import org.switchyard.Context;
import org.switchyard.component.soap.composer.SOAPBindingData;
import org.switchyard.component.soap.composer.SOAPContextMapper;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPFactory;
public class WSHeaderContextMapper extends SOAPContextMapper {
private String user = "user";
private String password = "pass";
#Override
public void mapTo(Context context, SOAPBindingData target) throws Exception {
SOAPFactory factory = SOAPFactory.newInstance();
SOAPElement element = factory.createElement("Security", "wsse", WSConstants.WSSE_NS);
WSSecUsernameToken utBuilder = createUsernameToken(this.user, password);
utBuilder.prepare(element.getOwnerDocument());
element.addChildElement(factory.createElement(utBuilder.getUsernameTokenElement()));
context.setProperty(element.getElementQName().toString(), element);
super.mapTo(context, target);
}
private WSSecUsernameToken createUsernameToken(String userName, String password) {
WSSecUsernameToken utBuilder = new WSSecUsernameToken();
utBuilder.setUserInfo(userName, password);
utBuilder.setPasswordType(WSConstants.PASSWORD_TEXT);
return utBuilder;
}
}